!% -s !% $ALLOC_CHUNK_SIZE=32000 !% $MAX_ARRAYS=10000 !% $MAX_CLASSES=200 !% $MAX_VERBS=255 !% $MAX_LABELS=200000 !% $MAX_ZCODE_SIZE=500000 !% $MAX_STATIC_DATA=180000 !% $MAX_PROP_TABLE_SIZE=200000 !% $MAX_INDIV_PROP_TABLE_SIZE=20000 !% $MAX_STACK_SIZE=65536 !% $MAX_SYMBOLS=20000 !% $MAX_EXPRESSION_NODES=256 !% $MAX_LOCAL_VARIABLES=256 ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Other Configuration ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant Grammar__Version 2; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Identification ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! This file was compiled by Inform 7: the build number and version of the ! I6 template layer used are as follows. Constant NI_BUILD_COUNT "6M62"; Constant LibSerial = "080126"; Constant LibRelease = "6/12N"; Constant LIBRARY_VERSION = 612; Constant PLUGIN_FILES; Array UUID_ARRAY string "UUID://2121920B-F1F1-4DE9-8372-B3BEE3BAA669//"; Global Story = BC_0; Constant Headline BC_1; Constant Story_Author BC_2; Release 1; Serial "200426"; Default Story 0; Default Headline 0; [ ShowExtensionVersions ; print "Standard Rules version 3/120430 by Graham Nelson^"; ]; [ ShowFullExtensionVersions ; print "Standard Rules version 3/120430 by Graham Nelson^"; print "English Language version 1 by Graham Nelson^"; print "Basic Screen Effects version 7/140425 by Emily Short^"; print "Locksmith version 12 by Emily Short^"; ]; [ ShowOneExtension id ! Implied call parameter ; if (id == 1) print "Standard Rules version 3/120430 by Graham Nelson"; if (id == 2) print "English Language version 1 by Graham Nelson"; if (id == 3) print "Basic Screen Effects version 7/140425 by Emily Short"; if (id == 4) print "Locksmith version 12 by Emily Short"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Use options ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Use option: Constant DynamicMemoryAllocation = 8192; ! Use option: Constant TEXT_TY_BufferSize = 1024+3; ! Use option: Constant MAX_FIGURE_THUMBNAILS_IN_INDEX = 50; ! Use option: Constant MATCH_LIST_WORDS = 100; #Ifndef USE_SCORING; Constant USE_SCORING = 0; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Constants ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: VM Target Constants ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifndef WORDSIZE; ! compiling with Z-code only compiler Constant TARGET_ZCODE; Constant WORDSIZE 2; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Wordsize-Dependent Definitions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Iftrue (WORDSIZE == 2); Constant NULL = $ffff; Constant WORD_HIGHBIT = $8000; Constant WORD_NEXTTOHIGHBIT = $4000; Constant IMPROBABLE_VALUE = $7fe3; Constant MAX_POSITIVE_NUMBER 32767; Constant MIN_NEGATIVE_NUMBER -32768; Constant REPARSE_CODE = 10000; #Endif; #Iftrue (WORDSIZE == 4); Constant NULL = $ffffffff; Constant WORD_HIGHBIT = $80000000; Constant WORD_NEXTTOHIGHBIT = $40000000; Constant IMPROBABLE_VALUE = $deadce11; Constant MAX_POSITIVE_NUMBER 2147483647; Constant MIN_NEGATIVE_NUMBER -2147483648; Constant REPARSE_CODE = $40000000; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Z-Machine Definitions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef TARGET_ZCODE; Global max_z_object; Constant INDIV_PROP_START 64; ! Offsets into Z-machine header: Constant HDR_ZCODEVERSION = $00; ! byte Constant HDR_TERPFLAGS = $01; ! byte Constant HDR_GAMERELEASE = $02; ! word Constant HDR_HIGHMEMORY = $04; ! word Constant HDR_INITIALPC = $06; ! word Constant HDR_DICTIONARY = $08; ! word Constant HDR_OBJECTS = $0A; ! word Constant HDR_GLOBALS = $0C; ! word Constant HDR_STATICMEMORY = $0E; ! word Constant HDR_GAMEFLAGS = $10; ! word Constant HDR_GAMESERIAL = $12; ! six ASCII characters Constant HDR_ABBREVIATIONS = $18; ! word Constant HDR_FILELENGTH = $1A; ! word Constant HDR_CHECKSUM = $1C; ! word Constant HDR_TERPNUMBER = $1E; ! byte Constant HDR_TERPVERSION = $1F; ! byte Constant HDR_SCREENHLINES = $20; ! byte Constant HDR_SCREENWCHARS = $21; ! byte Constant HDR_SCREENWUNITS = $22; ! word Constant HDR_SCREENHUNITS = $24; ! word Constant HDR_FONTWUNITS = $26; ! byte Constant HDR_FONTHUNITS = $27; ! byte Constant HDR_ROUTINEOFFSET = $28; ! word Constant HDR_STRINGOFFSET = $2A; ! word Constant HDR_BGCOLOUR = $2C; ! byte Constant HDR_FGCOLOUR = $2D; ! byte Constant HDR_TERMCHARS = $2E; ! word Constant HDR_PIXELSTO3 = $30; ! word Constant HDR_TERPSTANDARD = $32; ! two bytes Constant HDR_ALPHABET = $34; ! word Constant HDR_EXTENSION = $36; ! word Constant HDR_UNUSED = $38; ! two words Constant HDR_INFORMVERSION = $3C; ! four ASCII characters #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Glulx Definitions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF TARGET_GLULX; Global unicode_gestalt_ok; ! Set if interpreter supports Unicode ! Offsets into Glulx header and start of ROM: Constant HDR_MAGICNUMBER = $00; ! long word Constant HDR_GLULXVERSION = $04; ! long word Constant HDR_RAMSTART = $08; ! long word Constant HDR_EXTSTART = $0C; ! long word Constant HDR_ENDMEM = $10; ! long word Constant HDR_STACKSIZE = $14; ! long word Constant HDR_STARTFUNC = $18; ! long word Constant HDR_DECODINGTBL = $1C; ! long word Constant HDR_CHECKSUM = $20; ! long word Constant ROM_INFO = $24; ! four ASCII characters Constant ROM_MEMORYLAYOUT = $28; ! long word Constant ROM_INFORMVERSION = $2C; ! four ASCII characters Constant ROM_COMPVERSION = $30; ! four ASCII characters Constant ROM_GAMERELEASE = $34; ! short word Constant ROM_GAMESERIAL = $36; ! six ASCII characters #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Powers of Two ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array PowersOfTwo_TB --> $$100000000000 $$010000000000 $$001000000000 $$000100000000 $$000010000000 $$000001000000 $$000000100000 $$000000010000 $$000000001000 $$000000000100 $$000000000010 $$000000000001; Array IncreasingPowersOfTwo_TB --> $$0000000000000001 $$0000000000000010 $$0000000000000100 $$0000000000001000 $$0000000000010000 $$0000000000100000 $$0000000001000000 $$0000000010000000 $$0000000100000000 $$0000001000000000 $$0000010000000000 $$0000100000000000 $$0001000000000000 $$0010000000000000 $$0100000000000000 $$1000000000000000; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Text Styles ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant NORMAL_VMSTY = 0; Constant HEADER_VMSTY = 3; Constant SUBHEADER_VMSTY = 4; Constant ALERT_VMSTY = 5; Constant NOTE_VMSTY = 6; Constant BLOCKQUOTE_VMSTY = 7; Constant INPUT_VMSTY = 8; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Colour Numbers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant CLR_DEFAULT = 1; Constant CLR_BLACK = 2; Constant CLR_RED = 3; Constant CLR_GREEN = 4; Constant CLR_YELLOW = 5; Constant CLR_BLUE = 6; Constant CLR_MAGENTA = 7; Constant CLR_PURPLE = 7; Constant CLR_CYAN = 8; Constant CLR_AZURE = 8; Constant CLR_WHITE = 9; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Window Numbers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant WIN_ALL = 0; ! Both windows at once Constant WIN_STATUS = 1; Constant WIN_MAIN = 2; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Paragraphing Flags ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant PARA_COMPLETED = 1; Constant PARA_PROMPTSKIP = 2; Constant PARA_SUPPRESSPROMPTSKIP = 4; Constant PARA_NORULEBOOKBREAKS = 8; Constant PARA_CONTENTEXPECTED = 16; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Descriptors in the Language of Play ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant POSSESS_PK = $100; Constant DEFART_PK = $101; Constant INDEFART_PK = $102; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Run-Time Problem Numbers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RTP_BACKDROP = 1; Constant RTP_EXITDOOR = 2; Constant RTP_NOEXIT = 3; Constant RTP_CANTCHANGE = 4; Constant RTP_IMPREL = 5; Constant RTP_RULESTACK = 6; ! Now out of use Constant RTP_TOOMANYRULEBOOKS = 7; Constant RTP_TOOMANYEVENTS = 8; Constant RTP_BADPROPERTY = 9; Constant RTP_UNPROVIDED = 10; Constant RTP_UNSET = 11; Constant RTP_TOOMANYACTS = 12; Constant RTP_CANTABANDON = 13; Constant RTP_CANTEND = 14; Constant RTP_CANTMOVENOTHING = 15; Constant RTP_CANTREMOVENOTHING = 16; Constant RTP_DIVZERO = 17; Constant RTP_BADVALUEPROPERTY = 18; Constant RTP_NOTBACKDROP = 19; Constant RTP_TABLE_NOCOL = 20; Constant RTP_TABLE_NOCORR = 21; Constant RTP_TABLE_NOROW = 22; Constant RTP_TABLE_NOENTRY = 23; Constant RTP_TABLE_NOTABLE = 24; Constant RTP_TABLE_NOMOREBLANKS = 25; Constant RTP_TABLE_NOROWS = 26; Constant RTP_TABLE_CANTSORT = 27; Constant RTP_NOTINAROOM = 28; Constant RTP_BADTOPIC = 29; Constant RTP_ROUTELESS = 30; Constant RTP_PROPOFNOTHING = 31; Constant RTP_DECIDEONWRONGKIND = 32; Constant RTP_DECIDEONNOTHING = 33; Constant RTP_TABLE_CANTSAVE = 34; Constant RTP_TABLE_WONTFIT = 35; Constant RTP_TABLE_BADFILE = 36; Constant RTP_LOWLEVELERROR = 37; Constant RTP_DONTIGNORETURNSEQUENCE = 38; Constant RTP_SAYINVALIDSNIPPET = 39; Constant RTP_SPLICEINVALIDSNIPPET = 40; Constant RTP_INCLUDEINVALIDSNIPPET = 41; Constant RTP_LISTWRITERMEMORY = 42; Constant RTP_CANTREMOVEPLAYER = 43; Constant RTP_CANTREMOVEDOORS = 44; Constant RTP_CANTCHANGEOFFSTAGE = 45; Constant RTP_MSTACKMEMORY = 46; Constant RTP_TYPECHECK = 47; Constant RTP_FILEIOERROR = 48; Constant RTP_HEAPERROR = 49; Constant RTP_LISTRANGEERROR = 50; Constant RTP_REGEXPSYNTAXERROR = 51; Constant RTP_NOGLULXUNICODE = 52; Constant RTP_BACKDROPONLY = 53; Constant RTP_NOTTHING = 54; Constant RTP_SCENEHASNTSTARTED = 55; Constant RTP_SCENEHASNTENDED = 56; Constant RTP_NEGATIVEROOT = 57; Constant RTP_TABLE_CANTRUNTHROUGH = 58; Constant RTP_CANTITERATE = 59; Constant RTP_WRONGASSIGNEDKIND = 60; Constant RTP_CANTBEOFFSTAGE = 61; Constant RTP_RELKINDVIOLATION = 62; Constant RTP_CANTMAKEPART = 63; Constant RTP_TEXTTOKENTOOHARD = 64; Constant RTP_TABLE_NOTABLE2 = 65; Constant RTP_RELATIONCHANGEIMPOSSIBLE = 66; Constant RTP_RELMINIMAL = 67; Constant RTP_LISTSIZENEGATIVE = 68; Constant RTP_REGIONSNOTADJACENT = 69; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Template Activities ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant PRINTING_THE_NAME_ACT = 0; Constant PRINTING_THE_PLURAL_NAME_ACT = 1; Constant PRINTING_A_NUMBER_OF_ACT = 2; Constant PRINTING_ROOM_DESC_DETAILS_ACT = 3; Constant PRINTING_INVENTORY_DETAILS_ACT = 4; Constant LISTING_CONTENTS_ACT = 5; Constant GROUPING_TOGETHER_ACT = 6; Constant WRITING_A_PARAGRAPH_ABOUT_ACT = 7; Constant LISTING_NONDESCRIPT_ITEMS_ACT = 8; Constant PRINTING_NAME_OF_DARK_ROOM_ACT = 9; Constant PRINTING_DESC_OF_DARK_ROOM_ACT = 10; Constant PRINTING_NEWS_OF_DARKNESS_ACT = 11; Constant PRINTING_NEWS_OF_LIGHT_ACT = 12; Constant REFUSAL_TO_ACT_IN_DARK_ACT = 13; Constant CONSTRUCTING_STATUS_LINE_ACT = 14; Constant PRINTING_BANNER_TEXT_ACT = 15; Constant READING_A_COMMAND_ACT = 16; Constant DECIDING_SCOPE_ACT = 17; Constant DECIDING_CONCEALED_POSSESS_ACT = 18; Constant DECIDING_WHETHER_ALL_INC_ACT = 19; Constant CLARIFYING_PARSERS_CHOICE_ACT = 20; Constant ASKING_WHICH_DO_YOU_MEAN_ACT = 21; Constant PRINTING_A_PARSER_ERROR_ACT = 22; Constant SUPPLYING_A_MISSING_NOUN_ACT = 23; Constant SUPPLYING_A_MISSING_SECOND_ACT = 24; Constant IMPLICITLY_TAKING_ACT = 25; Constant STARTING_VIRTUAL_MACHINE_ACT = 26; Constant AMUSING_A_VICTORIOUS_PLAYER_ACT = 27; Constant PRINTING_PLAYERS_OBITUARY_ACT = 28; Constant DEALING_WITH_FINAL_QUESTION_ACT = 29; Constant PRINTING_LOCALE_DESCRIPTION_ACT = 30; Constant CHOOSING_NOTABLE_LOCALE_OBJ_ACT = 31; Constant PRINTING_LOCALE_PARAGRAPH_ACT = 32; Constant PRINTING_RESPONSE_ACT = 33; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Template Rulebooks ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant STARTUP_RB = 0; Constant TURN_SEQUENCE_RB = 1; Constant SHUTDOWN_RB = 2; Constant WHEN_PLAY_BEGINS_RB = 4; Constant WHEN_PLAY_ENDS_RB = 5; Constant WHEN_SCENE_BEGINS_RB = 6; Constant WHEN_SCENE_ENDS_RB = 7; Constant ACTION_PROCESSING_RB = 9; Constant SETTING_ACTION_VARIABLES_RB = 10; Constant SPECIFIC_ACTION_PROCESSING_RB = 11; Constant ACCESSIBILITY_RB = 13; Constant REACHING_INSIDE_RB = 14; Constant REACHING_OUTSIDE_RB = 15; Constant VISIBLE_RB = 16; Constant PERSUADE_RB = 17; Constant UNSUCCESSFUL_ATTEMPT_RB = 18; Constant AFTER_RB = 23; Constant REPORT_RB = 24; Constant MULTIPLE_ACTION_PROCESSING_RB = 26; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Kind IDs ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant UNKNOWN_TY = -2147483602; Constant VALUE_TY = 2; Constant POINTER_VALUE_TY = 3; Constant WORD_VALUE_TY = 4; Constant ARITHMETIC_VALUE_TY = 5; Constant REAL_ARITHMETIC_VALUE_TY = 6; Constant ENUMERATED_VALUE_TY = 7; Constant SAYABLE_VALUE_TY = 8; Constant COMBINED_VALUE_TY = 9; Constant OBJECT_TY = 10; Constant NUMBER_TY = 11; Constant REAL_NUMBER_TY = 12; Constant TRUTH_STATE_TY = 13; Constant TEXT_TY = 14; Constant UNICODE_CHARACTER_TY = 15; Constant USE_OPTION_TY = 16; Constant RESPONSE_TY = 17; Constant VERB_TY = 18; Constant SNIPPET_TY = 19; Constant TABLE_TY = 20; Constant EQUATION_TY = 21; Constant RULEBOOK_OUTCOME_TY = 22; Constant UNDERSTANDING_TY = 23; Constant INTERMEDIATE_TY = 24; Constant NIL_TY = 25; Constant KIND_VARIABLE_TY = 26; Constant PHRASE_TY = 27; Constant TUPLE_ENTRY_TY = 28; Constant VARIABLE_TY = 29; Constant RELATION_TY = 30; Constant RULE_TY = 31; Constant RULEBOOK_TY = 32; Constant ACTIVITY_TY = 33; Constant LIST_OF_TY = 34; Constant DESCRIPTION_OF_TY = 35; Constant PROPERTY_TY = 36; Constant TABLE_COLUMN_TY = 37; Constant COMBINATION_TY = 38; Constant DESCRIPTION_OF_ACTION_TY = 39; Constant STORED_ACTION_TY = 40; Constant ACTION_NAME_TY = 41; Constant TIME_TY = 42; Constant SCENE_TY = 43; Constant FIGURE_NAME_TY = 44; Constant SOUND_NAME_TY = 45; Constant EXTERNAL_FILE_TY = 46; Constant BASE_KIND_HWM = 53; ! Base kind high-water-mark ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Parser Error Numbers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant STUCK_PE = 1; Constant UPTO_PE = 2; Constant NUMBER_PE = 3; Constant ANIMA_PE = 4; Constant CANTSEE_PE = 5; Constant TOOLIT_PE = 6; Constant NOTHELD_PE = 7; Constant MULTI_PE = 8; Constant MMULTI_PE = 9; Constant VAGUE_PE = 10; Constant EXCEPT_PE = 11; Constant VERB_PE = 12; Constant SCENERY_PE = 13; Constant ITGONE_PE = 14; Constant JUNKAFTER_PE = 15; Constant TOOFEW_PE = 16; Constant NOTHING_PE = 17; Constant ASKSCOPE_PE = 18; Constant NOTINCONTEXT_PE = 19; Constant BLANKLINE_PE = 20; ! Not formally a parser error, but used by I7 as if Constant ANIMAAGAIN_PE = 21; Constant COMMABEGIN_PE = 22; Constant MISSINGPERSON_PE = 23; Constant ANIMALISTEN_PE = 24; Constant TOTALK_PE = 25; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Scope Searching Reasons ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant PARSING_REASON = 0; Constant TALKING_REASON = 1; Constant EACH_TURN_REASON = 2; Constant LOOPOVERSCOPE_REASON = 5; Constant TESTSCOPE_REASON = 6; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Token Types ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant ILLEGAL_TT = 0; ! Types of grammar token: illegal Constant ELEMENTARY_TT = 1; ! (one of those below) Constant PREPOSITION_TT = 2; ! e.g. 'into' Constant ROUTINE_FILTER_TT = 3; ! e.g. noun=CagedCreature Constant ATTR_FILTER_TT = 4; ! e.g. edible Constant SCOPE_TT = 5; ! e.g. scope=Spells Constant GPR_TT = 6; ! a general parsing routine Constant NOUN_TOKEN = 0; ! The elementary grammar tokens, and Constant HELD_TOKEN = 1; ! the numbers compiled by I6 to Constant MULTI_TOKEN = 2; ! encode them Constant MULTIHELD_TOKEN = 3; Constant MULTIEXCEPT_TOKEN = 4; Constant MULTIINSIDE_TOKEN = 5; Constant CREATURE_TOKEN = 6; Constant SPECIAL_TOKEN = 7; Constant NUMBER_TOKEN = 8; Constant TOPIC_TOKEN = 9; Constant ENDIT_TOKEN = 15; ! Value used to mean "end of grammar line" ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: GPR Return Values ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant GPR_FAIL = -1; ! Return values from General Parsing Constant GPR_PREPOSITION = 0; ! Routines Constant GPR_NUMBER = 1; Constant GPR_MULTIPLE = 2; Constant GPR_REPARSE = REPARSE_CODE; Constant GPR_NOUN = -256; ! Reparse, but as |NOUN_TOKEN| this time Constant GPR_HELD = GPR_NOUN + 1; ! And so on Constant GPR_MULTI = GPR_NOUN + 2; Constant GPR_MULTIHELD = GPR_NOUN + 3; Constant GPR_MULTIEXCEPT = GPR_NOUN + 4; Constant GPR_MULTIINSIDE = GPR_NOUN + 5; Constant GPR_CREATURE = GPR_NOUN + 6; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: List Styles ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant NEWLINE_BIT = $$0000000000000001; ! New-line after each entry Constant INDENT_BIT = $$0000000000000010; ! Indent each entry by depth Constant FULLINV_BIT = $$0000000000000100; ! Full inventory information after entry Constant ENGLISH_BIT = $$0000000000001000; ! English sentence style, with commas and and Constant RECURSE_BIT = $$0000000000010000; ! Recurse downwards with usual rules Constant ALWAYS_BIT = $$0000000000100000; ! Always recurse downwards Constant TERSE_BIT = $$0000000001000000; ! More terse English style Constant PARTINV_BIT = $$0000000010000000; ! Only brief inventory information after entry Constant DEFART_BIT = $$0000000100000000; ! Use the definite article in list Constant WORKFLAG_BIT = $$0000001000000000; ! At top level (only), only list objects ! which have the "workflag" attribute Constant ISARE_BIT = $$0000010000000000; ! Print " is" or " are" before list Constant CONCEAL_BIT = $$0000100000000000; ! Omit objects with "concealed" or "scenery": ! if WORKFLAG_BIT also set, then does not ! apply at top level, but does lower down Constant NOARTICLE_BIT = $$0001000000000000; ! Print no articles, definite or not Constant EXTRAINDENT_BIT = $$0010000000000000; ! New in I7: extra indentation of 1 level Constant CFIRSTART_BIT = $$0100000000000000; ! Capitalise first article in list ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Lengths Of Time ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant QUARTER_HOUR = 15; Constant HALF_HOUR = 30; Constant ONE_HOUR = 60; Constant TWELVE_HOURS = 720; Constant TWENTY_FOUR_HOURS = 1440; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Empty Text ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant EMPTY_TEXT_PACKED ""; Array EMPTY_TEXT_VALUE --> CONSTANT_PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Empty Table ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array TheEmptyTable --> 0 0; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Empty Set ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Prop_Falsity reason obj; return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Score and Rankings Table ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifndef MAX_SCORE; Global MAX_SCORE = 0; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Template Attributes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Attribute absent; ! Used to mark objects removed from play Attribute animate; ! I6-level marker for I7 kind "person" Attribute clothing; ! = I7 "wearable" Attribute concealed; ! = I7 "undescribed" Attribute container; ! I6-level marker for I7 kind "container" Attribute door; ! I6-level marker for I7 kind "door" Attribute edible; ! = I7 "edible" vs "inedible" Attribute enterable; ! = I7 "enterable" Attribute light; ! = I7 "lighted" vs "dark" Attribute lockable; ! = I7 "lockable" Attribute locked; ! = I7 "locked" Attribute moved; ! = I7 "handled" Attribute on; ! = I7 "switched on" vs "switched off" Attribute open; ! = I7 "open" vs "closed" Attribute openable; ! = I7 "openable" Attribute scenery; ! = I7 "scenery" Attribute static; ! = I7 "fixed in place" vs "portable" Attribute supporter; ! I6-level marker for I7 kind "supporter" Attribute switchable; ! I6-level marker for I7 kind "device" Attribute talkable; ! Not currently used by I7, but retained for possible future use Attribute transparent; ! = I7 "transparent" vs "opaque" Attribute visited; ! = I7 "visited" Attribute worn; ! marks that an object tree edge represents wearing Attribute male; ! not directly used by I7, but available for languages with genders Attribute female; ! = I7 "female" vs "male" Attribute neuter; ! = I7 "neuter" Attribute pluralname; ! = I7 "plural-named" Attribute ambigpluralname; ! = I7 "ambiguously plural" Attribute proper; ! = I7 "proper-named" Attribute remove_proper; ! remember to remove proper again when using ChangePlayer next Attribute privately_named; ! New in I7 Attribute mentioned; ! New in I7 Attribute pushable; ! New in I7 Attribute mark_as_room; ! Used in I7 to speed up testing "ofclass K1_room" Attribute mark_as_thing; ! Used in I7 to speed up testing "ofclass K2_thing" Attribute workflag; ! = I7 "marked for listing", but basically temporary workspace Attribute workflag2; ! new in I7 and also temporary workspace Constant list_filter_permits = privately_named; ! another I7 listwriter convenience ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Template Properties ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Property add_to_scope; ! used as in I6 to place component parts in scope Property article "a"; ! used as in I6 to implement articles Property capacity 100; ! = I7 "carrying capacity" Property component_child; ! new in I7: forest structure holding "part of" relation Property component_parent; ! new in I7 Property component_sibling; ! new in I7 Property description; ! = I7 "description" Property door_dir; ! used to implement two-sided doors, but holds direction object, not a property Property door_to; ! used as in I6 to implement two-sided doors Property found_in; ! used as in I6 to implement two-sided doors and backdrops Property initial; ! = I7 "initial description" Property list_together; ! used as in I6 to implement "grouping together" activity Property map_region; ! new in I7 Property parse_name 0; ! used as in I6 to implement "Understand... as..." grammars Property plural; ! used as in I6 to implement plural names for duplicate objects Property regional_found_in; ! new in I7 Property room_index; ! new in I7: storage for route-finding Property short_name 0; ! = I7 "printed name" Property vector; ! new in I7: storage for route-finding Property with_key; ! = I7 "matching key" Property KD_Count; ! Instance count of the kind of the current object Property IK1_Count; ! These are instance counts within kinds K1, K2, ... Property IK2_Count; ! and it is efficient to declare the common ones with Property Property IK4_Count; ! since this results in a slightly smaller story file Property IK5_Count; Property IK6_Count; Property IK8_Count; Property IK1_link; ! These are for linked lists used to make searches faster Property IK2_link; ! and again it's memory-efficient to declare the common ones Property IK5_link; ! Property IK6_link; ! Property IK8_link; ! Property articles; ! not used by I7, but an interesting hook in the parser Property grammar; ! not used by I7, but an interesting hook in the parser Property inside_description; ! not used by I7, but an interesting hook in the locale code Property short_name_indef 0; ! not used by I7, but an interesting hook in the listmaker ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Loss of Life ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant life = NULL; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Action Count ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant ActionCount = 84; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Fake Actions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Fake_Action ListMiscellany; Fake_Action Miscellany; Fake_Action PluralFound; Fake_Action TheSame; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions.i6t: Formal Parameters ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global formal_rv; Global formal_par0; Global formal_par1; Global formal_par2; Global formal_par3; Global formal_par4; Global formal_par5; Global formal_par6; Global formal_par7; Global unicode_temp; Constant RUCKSACK_CLASS = K15_player_s_holdall; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Global Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! [1] Global location = InformLibrary; ! does not = I7 "location": see below Global sline1; Global sline2; ! [2] Global say__p = 1; Global say__pc = 0; Global say__pc_save = 0; Global say__n; Global say__comp; Global los_rv = false; Global parameter_object; ! = I7 "parameter-object" = I7 "container in question" Global parameter_value; ! not typesafe in I7 Array deferred_calling_list --> 27; Global property_to_be_totalled; ! used to implement "total P of..." Global property_loop_sign; ! $+1$ for increasing order, $-1$ for decreasing Global suppress_scope_loops; Global temporary_value; ! can be used anywhere side-effects can't occur #ifdef TARGET_ZCODE; Constant BLOCKV_STACK_SIZE = 224; #ifnot; Constant BLOCKV_STACK_SIZE = DynamicMemoryAllocation/4; #endif; Array blockv_stack --> BLOCKV_STACK_SIZE; Global I7SFRAME; Global TEXT_TY_RE_Err = 0; Array LocalParking --> 64; ! [3] Global standard_interpreter = 0; Global undo_flag; ! [4] Global deadflag = 0; Global story_complete = 0; Global resurrect_please = false; ! [5] Global not_yet_in_play = true; ! set false when first command received Global turns = 1; ! = I7 "turn count" Global the_time = NULL; ! = I7 "time of day" Global time_rate = 1; Constant NUMBER_SCENES_CREATED = 3; Constant SCENE_ARRAY_SIZE = (NUMBER_SCENES_CREATED+2); Array scene_started --> SCENE_ARRAY_SIZE; Array scene_ended --> SCENE_ARRAY_SIZE; Array scene_status --> SCENE_ARRAY_SIZE; Array scene_endings --> SCENE_ARRAY_SIZE; Array scene_latest_ending --> SCENE_ARRAY_SIZE; ! [6] Global score; ! = I7 "score" Global last_score; ! = I7 "last notified score" Global notify_mode = 1; ! score notification on or off Global left_hand_status_line = T_SL_Location; ! = I7 "left hand status line" Global right_hand_status_line = T_SL_Score_Moves; ! = I7 "right hand status line" ! [7] Global player; ! = I7 "player" Global real_location; ! = I7 "location" Global visibility_ceiling; ! highest object in tree visible to player Global visibility_levels; ! distance in tree to that Global SACK_OBJECT; ! current player's holdall item in use ! [8] Global act_requester; Global actor; ! = I7 "person asked" = I7 "person reaching" Global actors_location; ! like real_location, but for the actor Global actor_location; ! = I7 "actor-location" Global action; Global meta; ! action is out of world Global inp1; Global inp2; Array multiple_object --> MATCH_LIST_WORDS; ! multiple-object list (I6 table array) Global toomany_flag; ! multiple-object list overflowed Global multiflag; ! multiple-object being processed Global multiple_object_item; ! item currently being processed in multiple-object list Global noun; ! = I7 "noun" Global second; ! = I7 "second noun" Global keep_silent; ! true if current action is being tried silently Global etype; ! parser error number if command not recognised Global trace_actions = 0; Global untouchable_object; Global untouchable_silence; Global touch_persona; Global special_word; ! dictionary address of first word in "[text]" token Global consult_from; ! word number of start of "[text]" token Global consult_words; ! number of words in "[text]" token Global parsed_number; ! value from any token not an object Global special_number1; ! first value, if token not an object Global special_number2; ! second value, if token not an object Array parser_results --> 16; ! for parser to write its results in Global parser_trace = 0; ! normally 0, but 1 to 5 traces parser workings Global pronoun_word; ! records which pronoun ("it", "them", ...) caused an error Global pronoun_obj; ! and what object it was thought to refer to Global players_command = 100; ! = I7 "player's command" Global matched_text; ! = I7 "matched text" Global reason_the_action_failed; ! = I7 "reason the action failed" Global understand_as_mistake_number; ! which form of "Understand... as a mistake" Global particular_possession; ! = I7 "particular possession" ! [9] Global parser_action; ! written by the parser for the benefit of GPRs Global parser_one; Global parser_two; Global parameters; ! number of I7 tokens parsed on the current line Global action_to_be; ! (if the current line were accepted) Global action_reversed; ! (parameters would be reversed in order) Global wn; ! word number within "parse" buffer (from 1) Global num_words; ! number of words in buffer Global verb_word; ! dictionary address of command verb Global verb_wordnum; ! word number of command verb ! [10] Global scope_reason = PARSING_REASON; ! current reason for searching scope Global scope_token; ! for "scope=Routine" grammar tokens Global scope_error; Global scope_stage; ! 1, 2 then 3 Global advance_warning; ! what a later-named thing will be Global reason_code = NULL; ! for the I6 veneer Global ats_flag = 0; ! for AddToScope routines Global ats_hls; ! [11] Global move_pushing; Global move_from; Global move_to; Global move_by; Global move_through; ! [12] #Ifdef DEFAULT_BRIEF_DESCRIPTIONS; Global lookmode = 1; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; #Ifdef DEFAULT_VERBOSE_DESCRIPTIONS; Global lookmode = 2; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; #Ifdef DEFAULT_SUPERBRIEF_DESCRIPTIONS; Global lookmode = 3; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; #Ifndef lookmode; Global lookmode = 2; ! 1 = BRIEF, 2 = VERBOSE, 3 = SUPERBRIEF #Endif; Global c_style; ! current list-writer style Global c_depth; ! current recursion depth Global c_iterator; ! current iteration function Global lt_value = EMPTY_TEXT_VALUE; ! common value of list_together Global listing_together; ! object number of one member of a group being listed together Global listing_size; ! size of such a group Global c_margin; ! current level of indentation printed by WriteListFrom() Global inventory_stage = 1; ! 1 or 2 according to the context in which list_together uses Global prior_named_noun; ! for adaptive text generation Global prior_named_list; ! ditto: length of list of items Global prior_named_list_gender; ! ditto: common gender of list of items, or -1 Global story_tense = 1; ! ditto: present tense Global story_viewpoint = 2; ! ditto: second person singular ! [13] Global clr_fg = 1; ! foreground colour Global clr_bg = 1; ! background colour Global clr_fgstatus = 1; ! foreground colour of statusline Global clr_bgstatus = 1; ! background colour of statusline Global clr_on; ! has colour been enabled by the player? Global statuswin_current; ! if writing to top window ! [14] Global statuswin_cursize = 0; Global statuswin_size = 1; ! [16] Global debug_flag = 0; Global debug_rules = 0; Global debug_scenes = 0; Global debug_rule_nesting; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: VM-Specific Code ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef TARGET_GLULX; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Summary ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Variables and Arrays ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array gg_event --> 4; Array gg_arguments buffer 28; Global gg_mainwin = 0; Global gg_statuswin = 0; Global gg_quotewin = 0; Global gg_scriptfref = 0; Global gg_scriptstr = 0; Global gg_savestr = 0; Global gg_commandstr = 0; Global gg_command_reading = 0; ! true if gg_commandstr is being replayed Global gg_foregroundchan = 0; Global gg_backgroundchan = 0; Constant GLK_NULL 0; Constant INPUT_BUFFER_LEN = 260; ! No extra byte necessary Constant MAX_BUFFER_WORDS = 20; Constant PARSE_BUFFER_LEN = 61; Array buffer buffer INPUT_BUFFER_LEN; Array buffer2 buffer INPUT_BUFFER_LEN; Array buffer3 buffer INPUT_BUFFER_LEN; Array parse --> PARSE_BUFFER_LEN; Array parse2 --> PARSE_BUFFER_LEN; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Infglk ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! infglk.h -- auto-generated by parse_dispatch.py. ! Generated for Glk API version 0.7.4 Constant evtype_Arrange = 5; Constant evtype_CharInput = 2; Constant evtype_Hyperlink = 8; Constant evtype_LineInput = 3; Constant evtype_MouseInput = 4; Constant evtype_None = 0; Constant evtype_Redraw = 6; Constant evtype_SoundNotify = 7; Constant evtype_Timer = 1; Constant evtype_VolumeNotify = 9; Constant filemode_Read = 2; Constant filemode_ReadWrite = 3; Constant filemode_Write = 1; Constant filemode_WriteAppend = 5; Constant fileusage_BinaryMode = 0; Constant fileusage_Data = 0; Constant fileusage_InputRecord = 3; Constant fileusage_SavedGame = 1; Constant fileusage_TextMode = 256; Constant fileusage_Transcript = 2; Constant fileusage_TypeMask = 15; Constant gestalt_CharInput = 1; Constant gestalt_CharOutput = 3; Constant gestalt_CharOutput_ApproxPrint = 1; Constant gestalt_CharOutput_CannotPrint = 0; Constant gestalt_CharOutput_ExactPrint = 2; Constant gestalt_DateTime = 20; Constant gestalt_DrawImage = 7; Constant gestalt_Graphics = 6; Constant gestalt_GraphicsCharInput = 23; Constant gestalt_GraphicsTransparency = 14; Constant gestalt_HyperlinkInput = 12; Constant gestalt_Hyperlinks = 11; Constant gestalt_LineInput = 2; Constant gestalt_LineInputEcho = 17; Constant gestalt_LineTerminatorKey = 19; Constant gestalt_LineTerminators = 18; Constant gestalt_MouseInput = 4; Constant gestalt_ResourceStream = 22; Constant gestalt_Sound = 8; Constant gestalt_Sound2 = 21; Constant gestalt_SoundMusic = 13; Constant gestalt_SoundNotify = 10; Constant gestalt_SoundVolume = 9; Constant gestalt_Timer = 5; Constant gestalt_Unicode = 15; Constant gestalt_UnicodeNorm = 16; Constant gestalt_Version = 0; Constant imagealign_InlineCenter = 3; Constant imagealign_InlineDown = 2; Constant imagealign_MarginLeft = 4; Constant imagealign_MarginRight = 5; Constant imagealign_InlineUp = 1; Constant keycode_Delete = 4294967289; Constant keycode_Down = 4294967291; Constant keycode_End = 4294967283; Constant keycode_Escape = 4294967288; Constant keycode_Func1 = 4294967279; Constant keycode_Func10 = 4294967270; Constant keycode_Func11 = 4294967269; Constant keycode_Func12 = 4294967268; Constant keycode_Func2 = 4294967278; Constant keycode_Func3 = 4294967277; Constant keycode_Func4 = 4294967276; Constant keycode_Func5 = 4294967275; Constant keycode_Func6 = 4294967274; Constant keycode_Func7 = 4294967273; Constant keycode_Func8 = 4294967272; Constant keycode_Func9 = 4294967271; Constant keycode_Home = 4294967284; Constant keycode_Left = 4294967294; Constant keycode_MAXVAL = 28; Constant keycode_PageDown = 4294967285; Constant keycode_PageUp = 4294967286; Constant keycode_Return = 4294967290; Constant keycode_Right = 4294967293; Constant keycode_Tab = 4294967287; Constant keycode_Unknown = 4294967295; Constant keycode_Up = 4294967292; Constant seekmode_Current = 1; Constant seekmode_End = 2; Constant seekmode_Start = 0; Constant style_Alert = 5; Constant style_BlockQuote = 7; Constant style_Emphasized = 1; Constant style_Header = 3; Constant style_Input = 8; Constant style_NUMSTYLES = 11; Constant style_Normal = 0; Constant style_Note = 6; Constant style_Preformatted = 2; Constant style_Subheader = 4; Constant style_User1 = 9; Constant style_User2 = 10; Constant stylehint_BackColor = 8; Constant stylehint_Indentation = 0; Constant stylehint_Justification = 2; Constant stylehint_NUMHINTS = 10; Constant stylehint_Oblique = 5; Constant stylehint_ParaIndentation = 1; Constant stylehint_Proportional = 6; Constant stylehint_ReverseColor = 9; Constant stylehint_Size = 3; Constant stylehint_TextColor = 7; Constant stylehint_Weight = 4; Constant stylehint_just_Centered = 2; Constant stylehint_just_LeftFlush = 0; Constant stylehint_just_LeftRight = 1; Constant stylehint_just_RightFlush = 3; Constant winmethod_Above = 2; Constant winmethod_Below = 3; Constant winmethod_Border = 0; Constant winmethod_BorderMask = 256; Constant winmethod_DirMask = 15; Constant winmethod_DivisionMask = 240; Constant winmethod_Fixed = 16; Constant winmethod_Left = 0; Constant winmethod_NoBorder = 256; Constant winmethod_Proportional = 32; Constant winmethod_Right = 1; Constant wintype_AllTypes = 0; Constant wintype_Blank = 2; Constant wintype_Graphics = 5; Constant wintype_Pair = 1; Constant wintype_TextBuffer = 3; Constant wintype_TextGrid = 4; [ glk_exit _vararg_count; ! glk_exit() @glk 1 _vararg_count 0; return 0; ]; [ glk_tick _vararg_count; ! glk_tick() @glk 3 _vararg_count 0; return 0; ]; [ glk_gestalt _vararg_count ret; ! glk_gestalt(uint, uint) => uint @glk 4 _vararg_count ret; return ret; ]; [ glk_gestalt_ext _vararg_count ret; ! glk_gestalt_ext(uint, uint, uintarray, arraylen) => uint @glk 5 _vararg_count ret; return ret; ]; [ glk_window_iterate _vararg_count ret; ! glk_window_iterate(window, &uint) => window @glk 32 _vararg_count ret; return ret; ]; [ glk_window_get_rock _vararg_count ret; ! glk_window_get_rock(window) => uint @glk 33 _vararg_count ret; return ret; ]; [ glk_window_get_root _vararg_count ret; ! glk_window_get_root() => window @glk 34 _vararg_count ret; return ret; ]; [ glk_window_open _vararg_count ret; ! glk_window_open(window, uint, uint, uint, uint) => window @glk 35 _vararg_count ret; return ret; ]; [ glk_window_close _vararg_count; ! glk_window_close(window, &{uint, uint}) @glk 36 _vararg_count 0; return 0; ]; [ glk_window_get_size _vararg_count; ! glk_window_get_size(window, &uint, &uint) @glk 37 _vararg_count 0; return 0; ]; [ glk_window_set_arrangement _vararg_count; ! glk_window_set_arrangement(window, uint, uint, window) @glk 38 _vararg_count 0; return 0; ]; [ glk_window_get_arrangement _vararg_count; ! glk_window_get_arrangement(window, &uint, &uint, &window) @glk 39 _vararg_count 0; return 0; ]; [ glk_window_get_type _vararg_count ret; ! glk_window_get_type(window) => uint @glk 40 _vararg_count ret; return ret; ]; [ glk_window_get_parent _vararg_count ret; ! glk_window_get_parent(window) => window @glk 41 _vararg_count ret; return ret; ]; [ glk_window_clear _vararg_count; ! glk_window_clear(window) @glk 42 _vararg_count 0; return 0; ]; [ glk_window_move_cursor _vararg_count; ! glk_window_move_cursor(window, uint, uint) @glk 43 _vararg_count 0; return 0; ]; [ glk_window_get_stream _vararg_count ret; ! glk_window_get_stream(window) => stream @glk 44 _vararg_count ret; return ret; ]; [ glk_window_set_echo_stream _vararg_count; ! glk_window_set_echo_stream(window, stream) @glk 45 _vararg_count 0; return 0; ]; [ glk_window_get_echo_stream _vararg_count ret; ! glk_window_get_echo_stream(window) => stream @glk 46 _vararg_count ret; return ret; ]; [ glk_set_window _vararg_count; ! glk_set_window(window) @glk 47 _vararg_count 0; return 0; ]; [ glk_window_get_sibling _vararg_count ret; ! glk_window_get_sibling(window) => window @glk 48 _vararg_count ret; return ret; ]; [ glk_stream_iterate _vararg_count ret; ! glk_stream_iterate(stream, &uint) => stream @glk 64 _vararg_count ret; return ret; ]; [ glk_stream_get_rock _vararg_count ret; ! glk_stream_get_rock(stream) => uint @glk 65 _vararg_count ret; return ret; ]; [ glk_stream_open_file _vararg_count ret; ! glk_stream_open_file(fileref, uint, uint) => stream @glk 66 _vararg_count ret; return ret; ]; [ glk_stream_open_memory _vararg_count ret; ! glk_stream_open_memory(nativechararray, arraylen, uint, uint) => stream @glk 67 _vararg_count ret; return ret; ]; [ glk_stream_close _vararg_count; ! glk_stream_close(stream, &{uint, uint}) @glk 68 _vararg_count 0; return 0; ]; [ glk_stream_set_position _vararg_count; ! glk_stream_set_position(stream, int, uint) @glk 69 _vararg_count 0; return 0; ]; [ glk_stream_get_position _vararg_count ret; ! glk_stream_get_position(stream) => uint @glk 70 _vararg_count ret; return ret; ]; [ glk_stream_set_current _vararg_count; ! glk_stream_set_current(stream) @glk 71 _vararg_count 0; return 0; ]; [ glk_stream_get_current _vararg_count ret; ! glk_stream_get_current() => stream @glk 72 _vararg_count ret; return ret; ]; [ glk_stream_open_resource _vararg_count ret; ! glk_stream_open_resource(uint, uint) => stream @glk 73 _vararg_count ret; return ret; ]; [ glk_fileref_create_temp _vararg_count ret; ! glk_fileref_create_temp(uint, uint) => fileref @glk 96 _vararg_count ret; return ret; ]; [ glk_fileref_create_by_name _vararg_count ret; ! glk_fileref_create_by_name(uint, string, uint) => fileref @glk 97 _vararg_count ret; return ret; ]; [ glk_fileref_create_by_prompt _vararg_count ret; ! glk_fileref_create_by_prompt(uint, uint, uint) => fileref @glk 98 _vararg_count ret; return ret; ]; [ glk_fileref_destroy _vararg_count; ! glk_fileref_destroy(fileref) @glk 99 _vararg_count 0; return 0; ]; [ glk_fileref_iterate _vararg_count ret; ! glk_fileref_iterate(fileref, &uint) => fileref @glk 100 _vararg_count ret; return ret; ]; [ glk_fileref_get_rock _vararg_count ret; ! glk_fileref_get_rock(fileref) => uint @glk 101 _vararg_count ret; return ret; ]; [ glk_fileref_delete_file _vararg_count; ! glk_fileref_delete_file(fileref) @glk 102 _vararg_count 0; return 0; ]; [ glk_fileref_does_file_exist _vararg_count ret; ! glk_fileref_does_file_exist(fileref) => uint @glk 103 _vararg_count ret; return ret; ]; [ glk_fileref_create_from_fileref _vararg_count ret; ! glk_fileref_create_from_fileref(uint, fileref, uint) => fileref @glk 104 _vararg_count ret; return ret; ]; [ glk_put_char _vararg_count; ! glk_put_char(uchar) @glk 128 _vararg_count 0; return 0; ]; [ glk_put_char_stream _vararg_count; ! glk_put_char_stream(stream, uchar) @glk 129 _vararg_count 0; return 0; ]; [ glk_put_string _vararg_count; ! glk_put_string(string) @glk 130 _vararg_count 0; return 0; ]; [ glk_put_string_stream _vararg_count; ! glk_put_string_stream(stream, string) @glk 131 _vararg_count 0; return 0; ]; [ glk_put_buffer _vararg_count; ! glk_put_buffer(nativechararray, arraylen) @glk 132 _vararg_count 0; return 0; ]; [ glk_put_buffer_stream _vararg_count; ! glk_put_buffer_stream(stream, nativechararray, arraylen) @glk 133 _vararg_count 0; return 0; ]; [ glk_set_style _vararg_count; ! glk_set_style(uint) @glk 134 _vararg_count 0; return 0; ]; [ glk_set_style_stream _vararg_count; ! glk_set_style_stream(stream, uint) @glk 135 _vararg_count 0; return 0; ]; [ glk_get_char_stream _vararg_count ret; ! glk_get_char_stream(stream) => int @glk 144 _vararg_count ret; return ret; ]; [ glk_get_line_stream _vararg_count ret; ! glk_get_line_stream(stream, nativechararray, arraylen) => uint @glk 145 _vararg_count ret; return ret; ]; [ glk_get_buffer_stream _vararg_count ret; ! glk_get_buffer_stream(stream, nativechararray, arraylen) => uint @glk 146 _vararg_count ret; return ret; ]; [ glk_char_to_lower _vararg_count ret; ! glk_char_to_lower(uchar) => uchar @glk 160 _vararg_count ret; return ret; ]; [ glk_char_to_upper _vararg_count ret; ! glk_char_to_upper(uchar) => uchar @glk 161 _vararg_count ret; return ret; ]; [ glk_stylehint_set _vararg_count; ! glk_stylehint_set(uint, uint, uint, int) @glk 176 _vararg_count 0; return 0; ]; [ glk_stylehint_clear _vararg_count; ! glk_stylehint_clear(uint, uint, uint) @glk 177 _vararg_count 0; return 0; ]; [ glk_style_distinguish _vararg_count ret; ! glk_style_distinguish(window, uint, uint) => uint @glk 178 _vararg_count ret; return ret; ]; [ glk_style_measure _vararg_count ret; ! glk_style_measure(window, uint, uint, &uint) => uint @glk 179 _vararg_count ret; return ret; ]; [ glk_select _vararg_count; ! glk_select(&{uint, window, uint, uint}) @glk 192 _vararg_count 0; return 0; ]; [ glk_select_poll _vararg_count; ! glk_select_poll(&{uint, window, uint, uint}) @glk 193 _vararg_count 0; return 0; ]; [ glk_request_line_event _vararg_count; ! glk_request_line_event(window, nativechararray, arraylen, uint) @glk 208 _vararg_count 0; return 0; ]; [ glk_cancel_line_event _vararg_count; ! glk_cancel_line_event(window, &{uint, window, uint, uint}) @glk 209 _vararg_count 0; return 0; ]; [ glk_request_char_event _vararg_count; ! glk_request_char_event(window) @glk 210 _vararg_count 0; return 0; ]; [ glk_cancel_char_event _vararg_count; ! glk_cancel_char_event(window) @glk 211 _vararg_count 0; return 0; ]; [ glk_request_mouse_event _vararg_count; ! glk_request_mouse_event(window) @glk 212 _vararg_count 0; return 0; ]; [ glk_cancel_mouse_event _vararg_count; ! glk_cancel_mouse_event(window) @glk 213 _vararg_count 0; return 0; ]; [ glk_request_timer_events _vararg_count; ! glk_request_timer_events(uint) @glk 214 _vararg_count 0; return 0; ]; [ glk_image_get_info _vararg_count ret; ! glk_image_get_info(uint, &uint, &uint) => uint @glk 224 _vararg_count ret; return ret; ]; [ glk_image_draw _vararg_count ret; ! glk_image_draw(window, uint, int, int) => uint @glk 225 _vararg_count ret; return ret; ]; [ glk_image_draw_scaled _vararg_count ret; ! glk_image_draw_scaled(window, uint, int, int, uint, uint) => uint @glk 226 _vararg_count ret; return ret; ]; [ glk_window_flow_break _vararg_count; ! glk_window_flow_break(window) @glk 232 _vararg_count 0; return 0; ]; [ glk_window_erase_rect _vararg_count; ! glk_window_erase_rect(window, int, int, uint, uint) @glk 233 _vararg_count 0; return 0; ]; [ glk_window_fill_rect _vararg_count; ! glk_window_fill_rect(window, uint, int, int, uint, uint) @glk 234 _vararg_count 0; return 0; ]; [ glk_window_set_background_color _vararg_count; ! glk_window_set_background_color(window, uint) @glk 235 _vararg_count 0; return 0; ]; [ glk_schannel_iterate _vararg_count ret; ! glk_schannel_iterate(schannel, &uint) => schannel @glk 240 _vararg_count ret; return ret; ]; [ glk_schannel_get_rock _vararg_count ret; ! glk_schannel_get_rock(schannel) => uint @glk 241 _vararg_count ret; return ret; ]; [ glk_schannel_create _vararg_count ret; ! glk_schannel_create(uint) => schannel @glk 242 _vararg_count ret; return ret; ]; [ glk_schannel_destroy _vararg_count; ! glk_schannel_destroy(schannel) @glk 243 _vararg_count 0; return 0; ]; [ glk_schannel_create_ext _vararg_count ret; ! glk_schannel_create_ext(uint, uint) => schannel @glk 244 _vararg_count ret; return ret; ]; [ glk_schannel_play_multi _vararg_count ret; ! glk_schannel_play_multi(schannelarray, arraylen, uintarray, arraylen, uint) => uint @glk 247 _vararg_count ret; return ret; ]; [ glk_schannel_play _vararg_count ret; ! glk_schannel_play(schannel, uint) => uint @glk 248 _vararg_count ret; return ret; ]; [ glk_schannel_play_ext _vararg_count ret; ! glk_schannel_play_ext(schannel, uint, uint, uint) => uint @glk 249 _vararg_count ret; return ret; ]; [ glk_schannel_stop _vararg_count; ! glk_schannel_stop(schannel) @glk 250 _vararg_count 0; return 0; ]; [ glk_schannel_set_volume _vararg_count; ! glk_schannel_set_volume(schannel, uint) @glk 251 _vararg_count 0; return 0; ]; [ glk_sound_load_hint _vararg_count; ! glk_sound_load_hint(uint, uint) @glk 252 _vararg_count 0; return 0; ]; [ glk_schannel_set_volume_ext _vararg_count; ! glk_schannel_set_volume_ext(schannel, uint, uint, uint) @glk 253 _vararg_count 0; return 0; ]; [ glk_schannel_pause _vararg_count; ! glk_schannel_pause(schannel) @glk 254 _vararg_count 0; return 0; ]; [ glk_schannel_unpause _vararg_count; ! glk_schannel_unpause(schannel) @glk 255 _vararg_count 0; return 0; ]; [ glk_set_hyperlink _vararg_count; ! glk_set_hyperlink(uint) @glk 256 _vararg_count 0; return 0; ]; [ glk_set_hyperlink_stream _vararg_count; ! glk_set_hyperlink_stream(stream, uint) @glk 257 _vararg_count 0; return 0; ]; [ glk_request_hyperlink_event _vararg_count; ! glk_request_hyperlink_event(window) @glk 258 _vararg_count 0; return 0; ]; [ glk_cancel_hyperlink_event _vararg_count; ! glk_cancel_hyperlink_event(window) @glk 259 _vararg_count 0; return 0; ]; [ glk_buffer_to_lower_case_uni _vararg_count ret; ! glk_buffer_to_lower_case_uni(uintarray, arraylen, uint) => uint @glk 288 _vararg_count ret; return ret; ]; [ glk_buffer_to_upper_case_uni _vararg_count ret; ! glk_buffer_to_upper_case_uni(uintarray, arraylen, uint) => uint @glk 289 _vararg_count ret; return ret; ]; [ glk_buffer_to_title_case_uni _vararg_count ret; ! glk_buffer_to_title_case_uni(uintarray, arraylen, uint, uint) => uint @glk 290 _vararg_count ret; return ret; ]; [ glk_buffer_canon_decompose_uni _vararg_count ret; ! glk_buffer_canon_decompose_uni(uintarray, arraylen, uint) => uint @glk 291 _vararg_count ret; return ret; ]; [ glk_buffer_canon_normalize_uni _vararg_count ret; ! glk_buffer_canon_normalize_uni(uintarray, arraylen, uint) => uint @glk 292 _vararg_count ret; return ret; ]; [ glk_put_char_uni _vararg_count; ! glk_put_char_uni(uint) @glk 296 _vararg_count 0; return 0; ]; [ glk_put_string_uni _vararg_count; ! glk_put_string_uni(unicode) @glk 297 _vararg_count 0; return 0; ]; [ glk_put_buffer_uni _vararg_count; ! glk_put_buffer_uni(uintarray, arraylen) @glk 298 _vararg_count 0; return 0; ]; [ glk_put_char_stream_uni _vararg_count; ! glk_put_char_stream_uni(stream, uint) @glk 299 _vararg_count 0; return 0; ]; [ glk_put_string_stream_uni _vararg_count; ! glk_put_string_stream_uni(stream, unicode) @glk 300 _vararg_count 0; return 0; ]; [ glk_put_buffer_stream_uni _vararg_count; ! glk_put_buffer_stream_uni(stream, uintarray, arraylen) @glk 301 _vararg_count 0; return 0; ]; [ glk_get_char_stream_uni _vararg_count ret; ! glk_get_char_stream_uni(stream) => int @glk 304 _vararg_count ret; return ret; ]; [ glk_get_buffer_stream_uni _vararg_count ret; ! glk_get_buffer_stream_uni(stream, uintarray, arraylen) => uint @glk 305 _vararg_count ret; return ret; ]; [ glk_get_line_stream_uni _vararg_count ret; ! glk_get_line_stream_uni(stream, uintarray, arraylen) => uint @glk 306 _vararg_count ret; return ret; ]; [ glk_stream_open_file_uni _vararg_count ret; ! glk_stream_open_file_uni(fileref, uint, uint) => stream @glk 312 _vararg_count ret; return ret; ]; [ glk_stream_open_memory_uni _vararg_count ret; ! glk_stream_open_memory_uni(uintarray, arraylen, uint, uint) => stream @glk 313 _vararg_count ret; return ret; ]; [ glk_stream_open_resource_uni _vararg_count ret; ! glk_stream_open_resource_uni(uint, uint) => stream @glk 314 _vararg_count ret; return ret; ]; [ glk_request_char_event_uni _vararg_count; ! glk_request_char_event_uni(window) @glk 320 _vararg_count 0; return 0; ]; [ glk_request_line_event_uni _vararg_count; ! glk_request_line_event_uni(window, uintarray, arraylen, uint) @glk 321 _vararg_count 0; return 0; ]; [ glk_set_echo_line_event _vararg_count; ! glk_set_echo_line_event(window, uint) @glk 336 _vararg_count 0; return 0; ]; [ glk_set_terminators_line_event _vararg_count; ! glk_set_terminators_line_event(window, uintarray, arraylen) @glk 337 _vararg_count 0; return 0; ]; [ glk_current_time _vararg_count; ! glk_current_time(&{int, uint, int}) @glk 352 _vararg_count 0; return 0; ]; [ glk_current_simple_time _vararg_count ret; ! glk_current_simple_time(uint) => int @glk 353 _vararg_count ret; return ret; ]; [ glk_time_to_date_utc _vararg_count; ! glk_time_to_date_utc(&{int, uint, int}, &{int, int, int, int, int, int, int, int}) @glk 360 _vararg_count 0; return 0; ]; [ glk_time_to_date_local _vararg_count; ! glk_time_to_date_local(&{int, uint, int}, &{int, int, int, int, int, int, int, int}) @glk 361 _vararg_count 0; return 0; ]; [ glk_simple_time_to_date_utc _vararg_count; ! glk_simple_time_to_date_utc(int, uint, &{int, int, int, int, int, int, int, int}) @glk 362 _vararg_count 0; return 0; ]; [ glk_simple_time_to_date_local _vararg_count; ! glk_simple_time_to_date_local(int, uint, &{int, int, int, int, int, int, int, int}) @glk 363 _vararg_count 0; return 0; ]; [ glk_date_to_time_utc _vararg_count; ! glk_date_to_time_utc(&{int, int, int, int, int, int, int, int}, &{int, uint, int}) @glk 364 _vararg_count 0; return 0; ]; [ glk_date_to_time_local _vararg_count; ! glk_date_to_time_local(&{int, int, int, int, int, int, int, int}, &{int, uint, int}) @glk 365 _vararg_count 0; return 0; ]; [ glk_date_to_simple_time_utc _vararg_count ret; ! glk_date_to_simple_time_utc(&{int, int, int, int, int, int, int, int}, uint) => int @glk 366 _vararg_count ret; return ret; ]; [ glk_date_to_simple_time_local _vararg_count ret; ! glk_date_to_simple_time_local(&{int, int, int, int, int, int, int, int}, uint) => int @glk 367 _vararg_count ret; return ret; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Rocks ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant GG_MAINWIN_ROCK 201; Constant GG_STATUSWIN_ROCK 202; Constant GG_QUOTEWIN_ROCK 203; Constant GG_SAVESTR_ROCK 301; Constant GG_SCRIPTSTR_ROCK 302; Constant GG_COMMANDWSTR_ROCK 303; Constant GG_COMMANDRSTR_ROCK 304; Constant GG_SCRIPTFREF_ROCK 401; Constant GG_FOREGROUNDCHAN_ROCK 410; Constant GG_BACKGROUNDCHAN_ROCK 411; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Stubs ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Stub HandleGlkEvent 2; #Stub IdentifyGlkObject 4; #Stub InitGlkWindow 1; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Starting Up ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_PreInitialise res; @gestalt 4 2 res; ! Test if this interpreter has Glk... if (res == 0) quit; ! ...without which there would be nothing we could do unicode_gestalt_ok = false; if (glk_gestalt(gestalt_Unicode, 0)) unicode_gestalt_ok = true; ! Set the VM's I/O system to be Glk. @setiosys 2 0; ]; [ VM_Initialise res sty i; @gestalt 4 2 res; ! Test if this interpreter has Glk... if (res == 0) quit; ! ...without which there would be nothing we could do ! First, we must go through all the Glk objects that exist, and see ! if we created any of them. One might think this strange, since the ! program has just started running, but remember that the player might ! have just typed "restart". GGRecoverObjects(); ! Sound channel initialisation, and RNG fixing, must be done now rather ! than later in case InitGlkWindow() returns a non-zero value. if (glk_gestalt(gestalt_Sound, 0)) { if (gg_foregroundchan == 0) gg_foregroundchan = glk_schannel_create(GG_FOREGROUNDCHAN_ROCK); if (gg_backgroundchan == 0) gg_backgroundchan = glk_schannel_create(GG_BACKGROUNDCHAN_ROCK); } #ifdef FIX_RNG; @random 10000 i; i = -i-2000; print "[Random number generator seed is ", i, "]^"; @setrandom i; #endif; ! FIX_RNG res = InitGlkWindow(0); if (res ~= 0) return; ! Now, gg_mainwin and gg_storywin might already be set. If not, set them. if (gg_mainwin == 0) { ! Open the story window. res = InitGlkWindow(GG_MAINWIN_ROCK); if (res == 0) { ! Left-justify the header style glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_Justification, 0); ! Try to make emphasized type in italics and not boldface glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Weight, 0); glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Oblique, 1); gg_mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, GG_MAINWIN_ROCK); } if (gg_mainwin == 0) quit; ! If we can't even open one window, give in } else { ! There was already a story window. We should erase it. glk_window_clear(gg_mainwin); } if (gg_statuswin == 0) { res = InitGlkWindow(GG_STATUSWIN_ROCK); if (res == 0) { statuswin_cursize = statuswin_size; for (sty=0: sty0 = 0; ]; [ GGRecoverObjects id; ! If GGRecoverObjects() has been called, all these stored IDs are ! invalid, so we start by clearing them all out. ! (In fact, after a restoreundo, some of them may still be good. ! For simplicity, though, we assume the general case.) gg_mainwin = 0; gg_statuswin = 0; gg_quotewin = 0; gg_scriptfref = 0; gg_scriptstr = 0; gg_savestr = 0; statuswin_cursize = 0; gg_foregroundchan = 0; gg_backgroundchan = 0; #Ifdef DEBUG; gg_commandstr = 0; gg_command_reading = false; #Endif; ! DEBUG ! Also tell the game to clear its object references. IdentifyGlkObject(0); id = glk_stream_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_SAVESTR_ROCK: gg_savestr = id; GG_SCRIPTSTR_ROCK: gg_scriptstr = id; #Ifdef DEBUG; GG_COMMANDWSTR_ROCK: gg_commandstr = id; gg_command_reading = false; GG_COMMANDRSTR_ROCK: gg_commandstr = id; gg_command_reading = true; #Endif; ! DEBUG default: IdentifyGlkObject(1, 1, id, gg_arguments-->0); } id = glk_stream_iterate(id, gg_arguments); } id = glk_window_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_MAINWIN_ROCK: gg_mainwin = id; GG_STATUSWIN_ROCK: gg_statuswin = id; GG_QUOTEWIN_ROCK: gg_quotewin = id; default: IdentifyGlkObject(1, 0, id, gg_arguments-->0); } id = glk_window_iterate(id, gg_arguments); } id = glk_fileref_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_SCRIPTFREF_ROCK: gg_scriptfref = id; default: IdentifyGlkObject(1, 2, id, gg_arguments-->0); } id = glk_fileref_iterate(id, gg_arguments); } if (glk_gestalt(gestalt_Sound, 0)) { id = glk_schannel_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_FOREGROUNDCHAN_ROCK: gg_foregroundchan = id; GG_BACKGROUNDCHAN_ROCK: gg_backgroundchan = id; default: IdentifyGlkObject(1, 3, id, gg_arguments-->0); } id = glk_schannel_iterate(id, gg_arguments); } if (gg_foregroundchan ~= 0) { glk_schannel_stop(gg_foregroundchan); } if (gg_backgroundchan ~= 0) { glk_schannel_stop(gg_backgroundchan); } } ! Tell the game to tie up any loose ends. IdentifyGlkObject(2); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Enable Acceleration ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ENABLE_GLULX_ACCEL_R addr res; @gestalt 9 0 res; if (res == 0) return; addr = #classes_table; @accelparam 0 addr; @accelparam 1 INDIV_PROP_START; @accelparam 2 Class; @accelparam 3 Object; @accelparam 4 Routine; @accelparam 5 String; addr = #globals_array + WORDSIZE * #g$self; @accelparam 6 addr; @accelparam 7 NUM_ATTR_BYTES; addr = #cpv__start; @accelparam 8 addr; @accelfunc 1 Z__Region; @accelfunc 2 CP__Tab; @accelfunc 3 RA__Pr; @accelfunc 4 RL__Pr; @accelfunc 5 OC__Cl; @accelfunc 6 RV__Pr; @accelfunc 7 OP__Pr; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Release Number ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Describe_Release i; print "Release "; @aloads ROM_GAMERELEASE 0 i; print i; print " / Serial number "; for (i=0 : i<6 : i++) print (char) ROM_GAMESERIAL->i; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Keyboard Input ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_KeyChar win nostat done res ix jx ch; jx = ch; ! squash compiler warnings if (win == 0) win = gg_mainwin; if (gg_commandstr ~= 0 && gg_command_reading ~= false) { done = glk_get_line_stream(gg_commandstr, gg_arguments, 31); if (done == 0) { glk_stream_close(gg_commandstr, 0); gg_commandstr = 0; gg_command_reading = false; ! fall through to normal user input. } else { ! Trim the trailing newline if (gg_arguments->(done-1) == 10) done = done-1; res = gg_arguments->0; if (res == '\') { res = 0; for (ix=1 : ixix; if (ch >= '0' && ch <= '9') { @shiftl res 4 res; res = res + (ch-'0'); } else if (ch >= 'a' && ch <= 'f') { @shiftl res 4 res; res = res + (ch+10-'a'); } else if (ch >= 'A' && ch <= 'F') { @shiftl res 4 res; res = res + (ch+10-'A'); } } } jump KCPContinue; } } done = false; glk_request_char_event(win); while (~~done) { glk_select(gg_event); switch (gg_event-->0) { 5: ! evtype_Arrange if (nostat) { glk_cancel_char_event(win); res = $80000000; done = true; break; } DrawStatusLine(); 2: ! evtype_CharInput if (gg_event-->1 == win) { res = gg_event-->2; done = true; } } ix = HandleGlkEvent(gg_event, 1, gg_arguments); if (ix == 2) { res = gg_arguments-->0; done = true; } else if (ix == -1) done = false; } if (gg_commandstr ~= 0 && gg_command_reading == false) { if (res < 32 || res >= 256 || (res == '\' or ' ')) { glk_put_char_stream(gg_commandstr, '\'); done = 0; jx = res; for (ix=0 : ix<8 : ix++) { @ushiftr jx 28 ch; @shiftl jx 4 jx; ch = ch & $0F; if (ch ~= 0 || ix == 7) done = 1; if (done) { if (ch >= 0 && ch <= 9) ch = ch + '0'; else ch = (ch - 10) + 'A'; glk_put_char_stream(gg_commandstr, ch); } } } else { glk_put_char_stream(gg_commandstr, res); } glk_put_char_stream(gg_commandstr, 10); ! newline } .KCPContinue; return res; ]; [ VM_KeyDelay tenths key done ix; glk_request_char_event(gg_mainwin); glk_request_timer_events(tenths*100); while (~~done) { glk_select(gg_event); ix = HandleGlkEvent(gg_event, 1, gg_arguments); if (ix == 2) { key = gg_arguments-->0; done = true; } else if (ix >= 0 && gg_event-->0 == 1 or 2) { key = gg_event-->2; done = true; } } glk_cancel_char_event(gg_mainwin); glk_request_timer_events(0); return key; ]; [ VM_ReadKeyboard a_buffer a_table done ix; if (gg_commandstr ~= 0 && gg_command_reading ~= false) { done = glk_get_line_stream(gg_commandstr, a_buffer+WORDSIZE, (INPUT_BUFFER_LEN-WORDSIZE)-1); if (done == 0) { glk_stream_close(gg_commandstr, 0); gg_commandstr = 0; gg_command_reading = false; } else { ! Trim the trailing newline if ((a_buffer+WORDSIZE)->(done-1) == 10) done = done-1; a_buffer-->0 = done; VM_Style(INPUT_VMSTY); glk_put_buffer(a_buffer+WORDSIZE, done); VM_Style(NORMAL_VMSTY); print "^"; jump KPContinue; } } done = false; glk_request_line_event(gg_mainwin, a_buffer+WORDSIZE, INPUT_BUFFER_LEN-WORDSIZE, 0); while (~~done) { glk_select(gg_event); switch (gg_event-->0) { 5: ! evtype_Arrange DrawStatusLine(); 3: ! evtype_LineInput if (gg_event-->1 == gg_mainwin) { a_buffer-->0 = gg_event-->2; done = true; } } ix = HandleGlkEvent(gg_event, 0, a_buffer); if (ix == 2) done = true; else if (ix == -1) done = false; } if (gg_commandstr ~= 0 && gg_command_reading == false) { glk_put_buffer_stream(gg_commandstr, a_buffer+WORDSIZE, a_buffer-->0); glk_put_char_stream(gg_commandstr, 10); ! newline } .KPContinue; VM_Tokenise(a_buffer,a_table); ! It's time to close any quote window we've got going. if (gg_quotewin) { glk_window_close(gg_quotewin, 0); gg_quotewin = 0; } #ifdef ECHO_COMMANDS; print "** "; for (ix=WORDSIZE: ix<(a_buffer-->0)+WORDSIZE: ix++) print (char) a_buffer->ix; print "^"; #endif; ! ECHO_COMMANDS ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Buffer Functions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_CopyBuffer bto bfrom i; for (i=0: ii = bfrom->i; ]; [ VM_PrintToBuffer buf len a b c; if (b) { if (metaclass(a) == Object && a.#b == WORDSIZE && metaclass(a.b) == String) buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a.b); else if (metaclass(a) == Routine) buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a, b, c); else buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a, b); } else if (metaclass(a) == Routine) buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a, b, c); else buf-->0 = Glulx_PrintAnyToArray(buf+WORDSIZE, len, a); if (buf-->0 > len) buf-->0 = len; return buf-->0; ]; [ VM_Tokenise buf tab cx numwords len bx ix wx wpos wlen val res dictlen entrylen; len = buf-->0; buf = buf+WORDSIZE; ! First, split the buffer up into words. We use the standard Infocom ! list of word separators (comma, period, double-quote). cx = 0; numwords = 0; while (cx < len) { while (cx < len && buf->cx == ' ') cx++; if (cx >= len) break; bx = cx; if (buf->cx == '.' or ',' or '"') cx++; else { while (cx < len && buf->cx ~= ' ' or '.' or ',' or '"') cx++; } tab-->(numwords*3+2) = (cx-bx); tab-->(numwords*3+3) = WORDSIZE+bx; numwords++; if (numwords >= MAX_BUFFER_WORDS) break; } tab-->0 = numwords; ! Now we look each word up in the dictionary. dictlen = #dictionary_table-->0; entrylen = DICT_WORD_SIZE + 7; for (wx=0 : wx(wx*3+2); wpos = tab-->(wx*3+3); ! Copy the word into the gg_tokenbuf array, clipping to DICT_WORD_SIZE ! characters and lower case. if (wlen > DICT_WORD_SIZE) wlen = DICT_WORD_SIZE; cx = wpos - WORDSIZE; for (ix=0 : ixix = VM_UpperToLowerCase(buf->(cx+ix)); for (: ixix = 0; val = #dictionary_table + WORDSIZE; @binarysearch gg_tokenbuf DICT_WORD_SIZE val entrylen dictlen 1 1 res; tab-->(wx*3+1) = res; } ]; [ LTI_Insert i ch b y; ! Protect us from strict mode, as this isn't an array in quite the ! sense it expects b = buffer; ! Insert character ch into buffer at point i. ! Being careful not to let the buffer possibly overflow: y = b-->0; if (y > INPUT_BUFFER_LEN) y = INPUT_BUFFER_LEN; ! Move the subsequent text along one character: for (y=y+WORDSIZE : y>i : y--) b->y = b->(y-1); b->i = ch; ! And the text is now one character longer: if (b-->0 < INPUT_BUFFER_LEN) (b-->0)++; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Dictionary Functions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_InvalidDictionaryAddress addr; if (addr < 0) rtrue; rfalse; ]; [ VM_DictionaryAddressToNumber w; return w; ]; [ VM_NumberToDictionaryAddress n; return n; ]; Array gg_tokenbuf -> DICT_WORD_SIZE; [ GGWordCompare str1 str2 ix jx; for (ix=0 : ixix) - (str2->ix); if (jx ~= 0) return jx; } return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: SHOWVERB support ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef DEBUG; [ DebugAction a str; if (a >= 4096) { print ""; return; } if (a < 0 || a >= #identifiers_table-->7) print ""; else { str = #identifiers_table-->6; str = str-->a; if (str) print (string) str; else print ""; } ]; [ DebugAttribute a str; if (a < 0 || a >= NUM_ATTR_BYTES*8) print ""; else { str = #identifiers_table-->4; str = str-->a; if (str) print (string) str; else print ""; } ]; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Command Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_CommandTableAddress i; return (#grammar_table)-->(i+1); ]; [ VM_PrintCommandWords i wd j dictlen entrylen; dictlen = #dictionary_table-->0; entrylen = DICT_WORD_SIZE + 7; for (j=0 : j ! Glulx_PrintAnything(0) ! Glulx_PrintAnything("string"); print (string) "string"; ! Glulx_PrintAnything('word') print (address) 'word'; ! Glulx_PrintAnything(obj) print (name) obj; ! Glulx_PrintAnything(obj, prop) obj.prop(); ! Glulx_PrintAnything(obj, prop, args...) obj.prop(args...); ! Glulx_PrintAnything(func) func(); ! Glulx_PrintAnything(func, args...) func(args...); [ Glulx_PrintAnything _vararg_count obj mclass; if (_vararg_count == 0) return; @copy sp obj; _vararg_count--; if (obj == 0) return; if (obj->0 == $60) { ! Dictionary word. Metaclass() can't catch this case, so we do it manually print (address) obj; return; } mclass = metaclass(obj); switch (mclass) { nothing: return; String: print (string) obj; return; Routine: ! Call the function with all the arguments which are already ! on the stack. @call obj _vararg_count 0; return; Object: if (_vararg_count == 0) { print (name) obj; } else { ! Push the object back onto the stack, and call the ! veneer routine that handles obj.prop() calls. @copy obj sp; _vararg_count++; @call CA__Pr _vararg_count 0; } return; } ]; [ Glulx_PrintAnyToArray _vararg_count arr arrlen str oldstr len; @copy sp arr; @copy sp arrlen; _vararg_count = _vararg_count - 2; oldstr = glk_stream_get_current(); str = glk_stream_open_memory(arr, arrlen, 1, 0); if (str == 0) return 0; glk_stream_set_current(str); @call Glulx_PrintAnything _vararg_count 0; glk_stream_set_current(oldstr); @copy $ffffffff sp; @copy str sp; @glk $0044 2 0; ! stream_close @copy sp len; @copy sp 0; return len; ]; Constant GG_ANYTOSTRING_LEN 66; Array AnyToStrArr -> GG_ANYTOSTRING_LEN+1; [ Glulx_ChangeAnyToCString _vararg_count ix len; ix = GG_ANYTOSTRING_LEN-2; @copy ix sp; ix = AnyToStrArr+1; @copy ix sp; ix = _vararg_count+2; @call Glulx_PrintAnyToArray ix len; AnyToStrArr->0 = $E0; if (len >= GG_ANYTOSTRING_LEN) len = GG_ANYTOSTRING_LEN-1; AnyToStrArr->(len+1) = 0; return AnyToStrArr; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: The Screen ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_ClearScreen window; if (window == WIN_ALL or WIN_MAIN) { glk_window_clear(gg_mainwin); if (gg_quotewin) { glk_window_close(gg_quotewin, 0); gg_quotewin = 0; } } if (gg_statuswin && window == WIN_ALL or WIN_STATUS) glk_window_clear(gg_statuswin); ]; [ VM_ScreenWidth id; id=gg_mainwin; if (gg_statuswin && statuswin_current) id = gg_statuswin; glk_window_get_size(id, gg_arguments, 0); return gg_arguments-->0; ]; [ VM_ScreenHeight; glk_window_get_size(gg_mainwin, 0, gg_arguments); return gg_arguments-->0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Window Colours ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_SetWindowColours f b window doclear i fwd bwd swin; if (clr_on && f && b) { if (window) swin = 5-window; ! 4 for TextGrid, 3 for TextBuffer fwd = MakeColourWord(f); bwd = MakeColourWord(b); for (i=0 : i 9) return c; c = c-2; return $ff0000*(c&1) + $ff00*(c&2 ~= 0) + $ff*(c&4 ~= 0); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Main Window ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_MainWindow; glk_set_window(gg_mainwin); ! set_window statuswin_current=0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Status Line ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_StatusLineHeight hgt; if (gg_statuswin == 0) return; if (hgt == statuswin_cursize) return; glk_window_set_arrangement(glk_window_get_parent(gg_statuswin), $12, hgt, 0); statuswin_cursize = hgt; ]; [ VM_MoveCursorInStatusLine line column; if (gg_statuswin == 0) return; glk_set_window(gg_statuswin); if (line == 0) { line = 1; column = 1; } glk_window_move_cursor(gg_statuswin, column-1, line-1); statuswin_current=1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Quotation Boxes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Box__Routine maxwid arr ix lines lastnl parwin; maxwid = 0; ! squash compiler warning lines = arr-->0; if (gg_quotewin == 0) { gg_arguments-->0 = lines; ix = InitGlkWindow(GG_QUOTEWIN_ROCK); if (ix == 0) gg_quotewin = glk_window_open(gg_mainwin, winmethod_Fixed + winmethod_Above, lines, wintype_TextBuffer, GG_QUOTEWIN_ROCK); } else { parwin = glk_window_get_parent(gg_quotewin); glk_window_set_arrangement(parwin, $12, lines, 0); } lastnl = true; if (gg_quotewin) { glk_window_clear(gg_quotewin); glk_set_window(gg_quotewin); lastnl = false; } VM_Style(BLOCKQUOTE_VMSTY); for (ix=0 : ix(ix+1); if (ix < lines-1 || lastnl) new_line; } VM_Style(NORMAL_VMSTY); if (gg_quotewin) glk_set_window(gg_mainwin); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: GlkList Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef DEBUG; [ GlkListSub id val; id = glk_window_iterate(0, gg_arguments); while (id) { print "Window ", id, " (", gg_arguments-->0, "): "; val = glk_window_get_type(id); switch (val) { 1: print "pair"; 2: print "blank"; 3: print "textbuffer"; 4: print "textgrid"; 5: print "graphics"; default: print "unknown"; } val = glk_window_get_parent(id); if (val) print ", parent is window ", val; else print ", no parent (root)"; val = glk_window_get_stream(id); print ", stream ", val; val = glk_window_get_echo_stream(id); if (val) print ", echo stream ", val; print "^"; id = glk_window_iterate(id, gg_arguments); } id = glk_stream_iterate(0, gg_arguments); while (id) { print "Stream ", id, " (", gg_arguments-->0, ")^"; id = glk_stream_iterate(id, gg_arguments); } id = glk_fileref_iterate(0, gg_arguments); while (id) { print "Fileref ", id, " (", gg_arguments-->0, ")^"; id = glk_fileref_iterate(id, gg_arguments); } if (glk_gestalt(gestalt_Sound, 0)) { id = glk_schannel_iterate(0, gg_arguments); while (id) { print "Soundchannel ", id, " (", gg_arguments-->0, ")^"; id = glk_schannel_iterate(id, gg_arguments); } } ]; Verb meta 'glklist' * -> Glklist; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Undo ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Undo result_code; @restoreundo result_code; return (~~result_code); ]; [ VM_Save_Undo result_code; @saveundo result_code; if (result_code == -1) { GGRecoverObjects(); return 2; } return (~~result_code); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Quit The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ QUIT_THE_GAME_R; if (actor ~= player) rfalse; if ((actor == player) && (untouchable_silence == false)) QUIT_THE_GAME_RM('A'); if (YesOrNo()~=0) quit; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Restart The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RESTART_THE_GAME_R; if (actor ~= player) rfalse; RESTART_THE_GAME_RM('A'); if (YesOrNo()~=0) { @restart; RESTART_THE_GAME_RM('B'); new_line; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Restore The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RESTORE_THE_GAME_R res fref; if (actor ~= player) rfalse; fref = glk_fileref_create_by_prompt($01, $02, 0); if (fref == 0) jump RFailed; gg_savestr = glk_stream_open_file(fref, $02, GG_SAVESTR_ROCK); glk_fileref_destroy(fref); if (gg_savestr == 0) jump RFailed; @restore gg_savestr res; glk_stream_close(gg_savestr, 0); gg_savestr = 0; .RFailed; RESTORE_THE_GAME_RM('A'); new_line; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Save The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SAVE_THE_GAME_R res fref; if (actor ~= player) rfalse; fref = glk_fileref_create_by_prompt($01, $01, 0); if (fref == 0) jump SFailed; gg_savestr = glk_stream_open_file(fref, $01, GG_SAVESTR_ROCK); glk_fileref_destroy(fref); if (gg_savestr == 0) jump SFailed; @save gg_savestr res; if (res == -1) { ! The player actually just typed "restore". We first have to recover ! all the Glk objects; the values in our global variables are all wrong. GGRecoverObjects(); glk_stream_close(gg_savestr, 0); ! stream_close gg_savestr = 0; RESTORE_THE_GAME_RM('B'); new_line; rtrue; } glk_stream_close(gg_savestr, 0); ! stream_close gg_savestr = 0; if (res == 0) { SAVE_THE_GAME_RM('B'); new_line; rtrue; } .SFailed; SAVE_THE_GAME_RM('A'); new_line; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Verify The Story File Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VERIFY_THE_STORY_FILE_R res; if (actor ~= player) rfalse; @verify res; if (res == 0) { VERIFY_THE_STORY_FILE_RM('A'); new_line; rtrue; } VERIFY_THE_STORY_FILE_RM('B'); new_line; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Switch Transcript On Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SWITCH_TRANSCRIPT_ON_R; if (actor ~= player) rfalse; if (gg_scriptstr ~= 0) { SWITCH_TRANSCRIPT_ON_RM('A'); new_line; rtrue; } if (gg_scriptfref == 0) { gg_scriptfref = glk_fileref_create_by_prompt($102, $05, GG_SCRIPTFREF_ROCK); if (gg_scriptfref == 0) jump S1Failed; } ! stream_open_file gg_scriptstr = glk_stream_open_file(gg_scriptfref, $05, GG_SCRIPTSTR_ROCK); if (gg_scriptstr == 0) jump S1Failed; glk_window_set_echo_stream(gg_mainwin, gg_scriptstr); SWITCH_TRANSCRIPT_ON_RM('B'); new_line; VersionSub(); return; .S1Failed; SWITCH_TRANSCRIPT_ON_RM('C'); new_line; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Switch Transcript Off Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SWITCH_TRANSCRIPT_OFF_R; if (actor ~= player) rfalse; if (gg_scriptstr == 0) { SWITCH_TRANSCRIPT_OFF_RM('A'); new_line; rtrue; } SWITCH_TRANSCRIPT_OFF_RM('B'); new_line; glk_stream_close(gg_scriptstr, 0); ! stream_close gg_scriptstr = 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Announce Story File Version Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ANNOUNCE_STORY_FILE_VERSION_R ix; if (actor ~= player) rfalse; Banner(); print "Identification number: "; for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix; print "^"; @gestalt 1 0 ix; print "Interpreter version ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, " / "; @gestalt 0 0 ix; print "VM ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, " / "; print "Library serial number ", (string) LibSerial, "^"; #Ifdef LanguageVersion; print (string) LanguageVersion, "^"; #Endif; ! LanguageVersion ShowExtensionVersions(); say__p = 1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Descend To Specific Action Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DESCEND_TO_SPECIFIC_ACTION_R; indirect(#actions_table-->(action+1)); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Glulx.i6t: Veneer ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Unsigned__Compare x y; @jleu x y ?lesseq; return 1; .lesseq; @jeq x y ?equal; return -1; .equal; return 0; ]; [ RT__ChLDW x y; @aload x y sp; @return sp; ]; [ RT__ChLDB x y; @aloadb x y sp; @return sp; ]; #Endif; #Ifdef TARGET_ZCODE; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Summary ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Variables and Arrays ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global top_object; ! largest valid number of any tree object Global xcommsdir; ! true if command recording is on Global transcript_mode; ! true if game scripting is on Constant INPUT_BUFFER_LEN = 120; ! Length of buffer array Array buffer -> 123; ! Buffer for parsing main line of input Array buffer2 -> 123; ! Buffers for supplementary questions Array buffer3 -> 123; ! Buffer retaining input for "again" Array parse buffer 63; ! Parse table mirroring it Array parse2 buffer 63; ! Global dict_start; Global dict_entry_size; Global dict_end; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Starting Up ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Initialise i; standard_interpreter = HDR_TERPSTANDARD-->0; transcript_mode = ((HDR_GAMEFLAGS-->0) & 1); dict_start = HDR_DICTIONARY-->0; dict_entry_size = dict_start->(dict_start->0 + 1); dict_start = dict_start + dict_start->0 + 4; dict_end = dict_start + ((dict_start - 2)-->0) * dict_entry_size; buffer->0 = INPUT_BUFFER_LEN; buffer2->0 = INPUT_BUFFER_LEN; buffer3->0 = INPUT_BUFFER_LEN; parse->0 = 15; parse2->0 = 15; top_object = #largest_object-255; #ifdef FIX_RNG; @random 10000 -> i; i = -i-2000; print "[Random number generator seed is ", i, "]^"; @random i -> i; #endif; ! FIX_RNG ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Enable Acceleration ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ENABLE_GLULX_ACCEL_R; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Release Number ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Describe_Release i; print "Release ", (HDR_GAMERELEASE-->0) & $03ff, " / Serial number "; for (i=0 : i<6 : i++) print (char) HDR_GAMESERIAL->i; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Keyboard Input ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_KeyChar win key; if (win) @set_window win; @read_char 1 -> key; return key; ]; [ VM_KeyDelay tenths key; @read_char 1 tenths VM_KeyDelay_Interrupt -> key; return key; ]; [ VM_KeyDelay_Interrupt; rtrue; ]; [ VM_ReadKeyboard a_buffer a_table i; read a_buffer a_table; #ifdef ECHO_COMMANDS; print "** "; for (i=2: i<=(a_buffer->1)+1: i++) print (char) a_buffer->i; print "^"; #ifnot; i=0; ! suppress compiler warning #endif; #Iftrue (#version_number == 6); @output_stream -1; @loadb a_buffer 1 -> sp; @add a_buffer 2 -> sp; @print_table sp sp; new_line; @output_stream 1; #Endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Buffer Functions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_CopyBuffer bto bfrom i; for (i=0: ii = bfrom->i; ]; [ VM_PrintToBuffer buf len a b c; @output_stream 3 buf; switch (metaclass(a)) { String: print (string) a; Routine: a(b, c); Object, Class: if (b) PrintOrRun(a, b, true); else print (name) a; } @output_stream -3; if (buf-->0 > len) print "Error: Overflow in VM_PrintToBuffer.^"; return buf-->0; ]; [ VM_Tokenise b p; b->(2 + b->1) = 0; @tokenise b p; ]; [ LTI_Insert i ch b y; ! Protect us from strict mode, as this isn't an array in quite the ! sense it expects b = buffer; ! Insert character ch into buffer at point i. ! Being careful not to let the buffer possibly overflow: y = b->1; if (y > b->0) y = b->0; ! Move the subsequent text along one character: for (y=y+2 : y>i : y--) b->y = b->(y-1); b->i = ch; ! And the text is now one character longer: if (b->1 < b->0) (b->1)++; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Dictionary Functions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_InvalidDictionaryAddress addr; if ((UnsignedCompare(addr, dict_start) < 0) || (UnsignedCompare(addr, dict_end) >= 0) || ((addr - dict_start) % dict_entry_size ~= 0)) rtrue; rfalse; ]; [ VM_DictionaryAddressToNumber w; return (w-(HDR_DICTIONARY-->0 + 7))/9; ]; [ VM_NumberToDictionaryAddress n; return HDR_DICTIONARY-->0 + 7 + 9*n; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Command Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_CommandTableAddress i; return (HDR_STATICMEMORY-->0)-->i; ]; [ VM_PrintCommandWords i da j; da = HDR_DICTIONARY-->0; for (j=0 : j<(da+5)-->0 : j++) if (da->(j*9 + 14) == $ff-i) print "'", (address) VM_NumberToDictionaryAddress(j), "' "; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: SHOWVERB support ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef DEBUG; [ DebugAction a anames; if (a >= 4096) { print ""; return; } anames = #identifiers_table; anames = anames + 2*(anames-->0) + 2*48; print (string) anames-->a; ]; [ DebugAttribute a anames; if (a < 0 || a >= 48) print ""; else { anames = #identifiers_table; anames = anames + 2*(anames-->0); print (string) anames-->a; } ]; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: RNG ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Seed_RNG n; if (n > 0) n = -n; @random n -> n; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Memory Allocation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_AllocateMemory amount; return 0; ]; [ VM_FreeMemory address; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Audiovisual Resources ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Picture resource_ID; #IFTRUE #version_number == 6; ! Z-machine version 6 @draw_picture resource_ID; #ENDIF; ]; [ VM_SoundEffect resource_ID; #IFTRUE #version_number == 6; ! Z-machine version 6 @sound_effect resource_ID; #ENDIF; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Typography ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Style sty; switch (sty) { NORMAL_VMSTY, NOTE_VMSTY: style roman; HEADER_VMSTY, SUBHEADER_VMSTY, ALERT_VMSTY: style bold; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Character Casing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_UpperToLowerCase c; switch (c) { 'A' to 'Z': c = c + 32; 202, 204, 212, 214, 221: c--; 217, 218: c = c - 2; 158 to 160, 167 to 168, 208 to 210: c = c - 3; 186 to 190, 196 to 200: c = c - 5 ; 175 to 180: c = c - 6; } return c; ]; [ VM_LowerToUpperCase c; switch (c) { 'a' to 'z': c = c - 32; 201, 203, 211, 213, 220: c++; 215, 216: c = c + 2; 155 to 157, 164 to 165, 205 to 207: c = c + 3; 181 to 185, 191 to 195: c = c + 5 ; 169 to 174: c = c + 6; } return c; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: The Screen ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_ClearScreen window; switch (window) { WIN_ALL: @erase_window -1; statuswin_cursize = 0; WIN_STATUS: @erase_window 1; WIN_MAIN: @erase_window 0; } ]; #Iftrue (#version_number == 6); [ VM_ScreenWidth width charw; @get_wind_prop 1 3 -> width; @get_wind_prop 1 13 -> charw; charw = charw & $FF; return (width+charw-1) / charw; ]; #Ifnot; [ VM_ScreenWidth; return (HDR_SCREENWCHARS->0); ]; #Endif; [ VM_ScreenHeight; return (HDR_SCREENHLINES->0); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Window Colours ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_SetWindowColours f b window; if (clr_on && f && b) { if (window == 0) { ! if setting both together, set reverse clr_fgstatus = b; clr_bgstatus = f; } if (window == 1) { clr_fgstatus = f; clr_bgstatus = b; } if (window == 0 or 2) { clr_fg = f; clr_bg = b; } if (statuswin_current) @set_colour clr_fgstatus clr_bgstatus; else @set_colour clr_fg clr_bg; } ]; [ VM_RestoreWindowColours; ! compare I6 library patch L61007 if (clr_on) { ! check colour has been used VM_SetWindowColours(clr_fg, clr_bg, 2); ! make sure both sets of variables are restored VM_SetWindowColours(clr_fgstatus, clr_bgstatus, 1, true); VM_ClearScreen(); } #Iftrue (#version_number == 6); ! request screen update (0-->8) = (0-->8) | $$00000100; #Endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Main Window ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_MainWindow; if (statuswin_current) { if (clr_on && clr_bgstatus > 1) @set_colour clr_fg clr_bg; else style roman; @set_window 0; } statuswin_current = false; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Status Line ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_MoveCursorInStatusLine line column; ! 1-based position on text grid if (~~statuswin_current) { @set_window 1; if (clr_on && clr_bgstatus > 1) @set_colour clr_fgstatus clr_bgstatus; else style reverse; } if (line == 0) { line = 1; column = 1; } #Iftrue (#version_number == 6); Z6_MoveCursor(line, column); #Ifnot; @set_cursor line column; #Endif; statuswin_current = true; ]; #Iftrue (#version_number == 6); [ Z6_MoveCursor line column charw charh; ! 1-based position on text grid @get_wind_prop 1 13 -> charw; ! font size @log_shift charw $FFF8 -> charh; charw = charw / $100; line = 1 + charh*(line-1); column = 1 + charw*(column-1); @set_cursor line column; ]; #Endif; #Iftrue (#version_number == 6); [ VM_StatusLineHeight height wx wy x y charh; ! Split the window. Standard 1.0 interpreters should keep the window 0 ! cursor in the same absolute position, but older interpreters, ! including Infocom's don't - they keep the window 0 cursor in the ! same position relative to its origin. We therefore compensate ! manually. @get_wind_prop 0 0 -> wy; @get_wind_prop 0 1 -> wx; @get_wind_prop 0 13 -> charh; @log_shift charh $FFF8 -> charh; @get_wind_prop 0 4 -> y; @get_wind_prop 0 5 -> x; height = height * charh; @split_window height; y = y - height + wy - 1; if (y < 1) y = 1; x = x + wx - 1; @set_cursor y x 0; statuswin_cursize = height; ]; #Ifnot; [ VM_StatusLineHeight height; if (statuswin_cursize ~= height) @split_window height; statuswin_cursize = height; ]; #Endif; #Iftrue (#version_number == 6); [ Z6_DrawStatusLine width x charw scw; (0-->8) = (0-->8) &~ $$00000100; @push say__p; @push say__pc; BeginActivity(CONSTRUCTING_STATUS_LINE_ACT); VM_StatusLineHeight(statuswin_size); ! Now clear the window. This isn't totally trivial. Our approach is to select the ! fixed space font, measure its width, and print an appropriate ! number of spaces. We round up if the screen isn't a whole number ! of characters wide, and rely on window 1 being set to clip by default. VM_MoveCursorInStatusLine(1, 1); @set_font 4 -> x; width = VM_ScreenWidth(); spaces width; ClearParagraphing(8); if (ForActivity(CONSTRUCTING_STATUS_LINE_ACT) == false) { ! Back to standard font for the display. We use output_stream 3 to ! measure the space required, the aim being to get 50 characters ! worth of space for the location name. VM_MoveCursorInStatusLine(1, 2); @set_font 1 -> x; TEXT_TY_Say(left_hand_status_line); @get_wind_prop 1 3 -> width; @get_wind_prop 1 13 -> charw; charw = charw & $FF; @output_stream 3 StorageForShortName; TEXT_TY_Say(right_hand_status_line); @output_stream -3; scw = HDR_PIXELSTO3-->0 + charw; x = 1+width-scw; @set_cursor 1 x; TEXT_TY_Say(right_hand_status_line); } ! Reselect roman, as Infocom's interpreters go funny if reverse is selected twice. VM_MainWindow(); ClearParagraphing(8); EndActivity(CONSTRUCTING_STATUS_LINE_ACT); @pull say__pc; @pull say__p; ]; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Quotation Boxes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Undo ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VM_Undo result_code; @restore_undo result_code; return result_code; ]; [ VM_Save_Undo result_code; @save_undo result_code; return result_code; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Quit The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ QUIT_THE_GAME_R; if (actor ~= player) rfalse; QUIT_THE_GAME_RM('A'); if (YesOrNo()~=0) quit; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Restart The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RESTART_THE_GAME_R; if (actor ~= player) rfalse; RESTART_THE_GAME_RM('A'); if (YesOrNo()~=0) { @restart; RESTART_THE_GAME_RM('B'); new_line; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Restore The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RESTORE_THE_GAME_R; if (actor ~= player) rfalse; restore Rmaybe; RESTORE_THE_GAME_RM('A'); new_line; rtrue; .RMaybe; RESTORE_THE_GAME_RM('B'); new_line; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Save The Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SAVE_THE_GAME_R flag; if (actor ~= player) rfalse; #IFV5; @save -> flag; switch (flag) { 0: SAVE_THE_GAME_RM('A'); new_line; 1: SAVE_THE_GAME_RM('B'); new_line; 2: RESTORE_THE_GAME_RM('B'); new_line; } #IFNOT; save Smaybe; SAVE_THE_GAME_RM('A'); new_line; rtrue; .SMaybe; SAVE_THE_GAME_RM('B'); new_line; #ENDIF; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Verify The Story File Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VERIFY_THE_STORY_FILE_R; if (actor ~= player) rfalse; @verify ?Vmaybe; jump Vwrong; .Vmaybe; VERIFY_THE_STORY_FILE_RM('A'); new_line; rtrue; .Vwrong; VERIFY_THE_STORY_FILE_RM('B'); new_line; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Switch Transcript On Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SWITCH_TRANSCRIPT_ON_R; if (actor ~= player) rfalse; transcript_mode = ((0-->8) & 1); if (transcript_mode) { SWITCH_TRANSCRIPT_ON_RM('A'); new_line; rtrue; } @output_stream 2; if (((0-->8) & 1) == 0) { SWITCH_TRANSCRIPT_ON_RM('C'); new_line; rtrue; } SWITCH_TRANSCRIPT_ON_RM('B'); new_line; VersionSub(); transcript_mode = true; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Switch Transcript Off Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SWITCH_TRANSCRIPT_OFF_R; if (actor ~= player) rfalse; transcript_mode = ((0-->8) & 1); if (transcript_mode == false) { SWITCH_TRANSCRIPT_OFF_RM('A'); new_line; rtrue; } SWITCH_TRANSCRIPT_OFF_RM('B'); new_line; @output_stream -2; if ((0-->8) & 1) { SWITCH_TRANSCRIPT_ON_RM('C'); new_line; rtrue; } transcript_mode = false; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Announce Story File Version Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ANNOUNCE_STORY_FILE_VERSION_R ix; if (actor ~= player) rfalse; Banner(); print "Identification number: "; for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix; print "^"; ix = 0; ! shut up compiler warning if (standard_interpreter > 0) { print "Standard interpreter ", standard_interpreter/256, ".", standard_interpreter%256, " (", HDR_TERPNUMBER->0; #Iftrue (#version_number == 6); print (char) '.', HDR_TERPVERSION->0; #Ifnot; print (char) HDR_TERPVERSION->0; #Endif; print ") / "; } else { print "Interpreter ", HDR_TERPNUMBER->0, " Version "; #Iftrue (#version_number == 6); print HDR_TERPVERSION->0; #Ifnot; print (char) HDR_TERPVERSION->0; #Endif; print " / "; } print "Library serial number ", (string) LibSerial, "^"; #Ifdef LanguageVersion; print (string) LanguageVersion, "^"; #Endif; ! LanguageVersion #ifdef ShowExtensionVersions; ShowExtensionVersions(); #endif; say__p = 1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Descend To Specific Action Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DESCEND_TO_SPECIFIC_ACTION_R; indirect(#actions_table-->action); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ZMachine.i6t: Veneer ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ OC__Cl obj cla j a n objflag; @jl obj 1 ?NotObj; @jg obj max_z_object ?NotObj; @inc objflag; @je cla K1_room ?~NotRoom; @test_attr obj mark_as_room ?rtrue; @rfalse; .NotRoom; @je cla K2_thing ?~NotObj; @test_attr obj mark_as_thing ?rtrue; @rfalse; .NotObj; @je cla Object Class ?ObjOrClass; @je cla Routine String ?RoutOrStr; @jin cla 1 ?~Mistake; @jz objflag ?rfalse; @get_prop_addr obj 2 -> a; @jz a ?rfalse; @get_prop_len a -> n; @div n 2 -> n; .Loop; @loadw a j -> sp; @je sp cla ?rtrue; @inc j; @jl j n ?Loop; @rfalse; .ObjOrClass; @jz objflag ?rfalse; @je cla Object ?JustObj; ! So now cla is Class @jg obj String ?~rtrue; @jin obj Class ?rtrue; @rfalse; .JustObj; ! So now cla is Object @jg obj String ?~rfalse; @jin obj Class ?rfalse; @rtrue; .RoutOrStr; @jz objflag ?~rfalse; @call_2s Z__Region obj -> sp; @inc sp; @je sp cla ?rtrue; @rfalse; .Mistake; RT__Err("apply 'ofclass' for", cla, -1); rfalse; ]; [ Unsigned__Compare x y u v; @je x y ?rfalse; ! i.e., return 0 @jl x 0 ?XNegative; ! So here x >= 0 and x ~= y @jl y 0 ?XPosYNeg; ! Here x >=0, y >= 0, x ~= y @jg x y ?rtrue; ! i.e., return 1 @ret -1; .XPosYNeg; ! Here x >= 0, y < 0, x ~= y @ret -1; .XNegative; @jl y 0 ?~rtrue; ! if x < 0, y >= 0, return 1 ! Here x < 0, y < 0, x ~= y @jg x y ?rtrue; @ret -1; ]; [ RT__ChLDW base offset; @loadw base offset -> sp; @ret sp; ]; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Compass ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Object Compass "compass" has concealed; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Language of Play ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Vocabulary ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant AGAIN1__WD = 'again'; Constant AGAIN2__WD = 'g//'; Constant AGAIN3__WD = 'again'; Constant OOPS1__WD = 'oops'; Constant OOPS2__WD = 'o//'; Constant OOPS3__WD = 'oops'; Constant UNDO1__WD = 'undo'; Constant UNDO2__WD = 'undo'; Constant UNDO3__WD = 'undo'; Constant ALL1__WD = 'all'; Constant ALL2__WD = 'each'; Constant ALL3__WD = 'every'; Constant ALL4__WD = 'everything'; Constant ALL5__WD = 'both'; Constant AND1__WD = 'and'; Constant AND2__WD = 'and'; Constant AND3__WD = 'and'; Constant BUT1__WD = 'but'; Constant BUT2__WD = 'except'; Constant BUT3__WD = 'but'; Constant ME1__WD = 'me'; Constant ME2__WD = 'myself'; Constant ME3__WD = 'self'; Constant OF1__WD = 'of'; Constant OF2__WD = 'of'; Constant OF3__WD = 'of'; Constant OF4__WD = 'of'; Constant OTHER1__WD = 'another'; Constant OTHER2__WD = 'other'; Constant OTHER3__WD = 'other'; Constant THEN1__WD = 'then'; Constant THEN2__WD = 'then'; Constant THEN3__WD = 'then'; Constant NO1__WD = 'n//'; Constant NO2__WD = 'no'; Constant NO3__WD = 'no'; Constant YES1__WD = 'y//'; Constant YES2__WD = 'yes'; Constant YES3__WD = 'yes'; Constant AMUSING__WD = 'amusing'; Constant FULLSCORE1__WD = 'fullscore'; Constant FULLSCORE2__WD = 'full'; Constant QUIT1__WD = 'q//'; Constant QUIT2__WD = 'quit'; Constant RESTART__WD = 'restart'; Constant RESTORE__WD = 'restore'; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Pronouns ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array LanguagePronouns table ! word possible GNAs connected ! to follow: to: ! a i ! s p s p ! mfnmfnmfnmfn 'it' $$001000111000 NULL 'him' $$100000000000 NULL 'her' $$010000000000 NULL 'them' $$000111000111 NULL; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Descriptors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array LanguageDescriptors table ! word possible GNAs descriptor connected ! to follow: type: to: ! a i ! s p s p ! mfnmfnmfnmfn 'my' $$111111111111 POSSESS_PK 0 'this' $$111111111111 POSSESS_PK 0 'these' $$000111000111 POSSESS_PK 0 'that' $$111111111111 POSSESS_PK 1 'those' $$000111000111 POSSESS_PK 1 'his' $$111111111111 POSSESS_PK 'him' 'her' $$111111111111 POSSESS_PK 'her' 'their' $$111111111111 POSSESS_PK 'them' 'its' $$111111111111 POSSESS_PK 'it' 'the' $$111111111111 DEFART_PK NULL 'a//' $$111000111000 INDEFART_PK NULL 'an' $$111000111000 INDEFART_PK NULL 'some' $$000111000111 INDEFART_PK NULL 'lit' $$111111111111 light NULL 'lighted' $$111111111111 light NULL 'unlit' $$111111111111 (-light) NULL; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Numbers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array LanguageNumbers table 'one' 1 'two' 2 'three' 3 'four' 4 'five' 5 'six' 6 'seven' 7 'eight' 8 'nine' 9 'ten' 10 'eleven' 11 'twelve' 12 'thirteen' 13 'fourteen' 14 'fifteen' 15 'sixteen' 16 'seventeen' 17 'eighteen' 18 'nineteen' 19 'twenty' 20 'twenty-one' 21 'twenty-two' 22 'twenty-three' 23 'twenty-four' 24 'twenty-five' 25 'twenty-six' 26 'twenty-seven' 27 'twenty-eight' 28 'twenty-nine' 29 'thirty' 30 ; [ LanguageNumber n f; if (n == 0) { print "zero"; rfalse; } if (n < 0) { print "minus "; n = -n; } #Iftrue (WORDSIZE == 4); if (n >= 1000000000) { if (f == 1) print ", "; print (LanguageNumber) n/1000000000, " billion"; n = n%1000000000; f = 1; } if (n >= 1000000) { if (f == 1) print ", "; print (LanguageNumber) n/1000000, " million"; n = n%1000000; f = 1; } #Endif; if (n >= 1000) { if (f == 1) print ", "; print (LanguageNumber) n/1000, " thousand"; n = n%1000; f = 1; } if (n >= 100) { if (f == 1) print ", "; print (LanguageNumber) n/100, " hundred"; n = n%100; f = 1; } if (n == 0) rfalse; #Ifdef DIALECT_US; if (f == 1) print " "; #Ifnot; if (f == 1) print " and "; #Endif; switch (n) { 1: print "one"; 2: print "two"; 3: print "three"; 4: print "four"; 5: print "five"; 6: print "six"; 7: print "seven"; 8: print "eight"; 9: print "nine"; 10: print "ten"; 11: print "eleven"; 12: print "twelve"; 13: print "thirteen"; 14: print "fourteen"; 15: print "fifteen"; 16: print "sixteen"; 17: print "seventeen"; 18: print "eighteen"; 19: print "nineteen"; 20 to 99: switch (n/10) { 2: print "twenty"; 3: print "thirty"; 4: print "forty"; 5: print "fifty"; 6: print "sixty"; 7: print "seventy"; 8: print "eighty"; 9: print "ninety"; } if (n%10 ~= 0) print "-", (LanguageNumber) n%10; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Time ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LanguageTimeOfDay hours mins i; i = hours%12; if (i == 0) i = 12; if (i < 10) print " "; print i, ":", mins/10, mins%10; if ((hours/12) > 0) print " pm"; else print " am"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Directions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LanguageDirection d; print (name) d; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Translation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LanguageToInformese; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Articles ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant LanguageAnimateGender = male; Constant LanguageInanimateGender = neuter; Constant LanguageContractionForms = 2; ! English has two: ! 0 = starting with a consonant ! 1 = starting with a vowel [ LanguageContraction text; if (text->0 == 'a' or 'e' or 'i' or 'o' or 'u' or 'A' or 'E' or 'I' or 'O' or 'U') return 1; return 0; ]; Array LanguageArticles --> ! Contraction form 0: Contraction form 1: ! Cdef Def Indef Cdef Def Indef "The " "the " "a " "The " "the " "an " ! Articles 0 "The " "the " "some " "The " "the " "some "; ! Articles 1 ! a i ! s p s p ! m f n m f n m f n m f n Array LanguageGNAsToArticles --> 0 0 0 1 1 1 0 0 0 1 1 1; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Language.i6t: Commands ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LanguageVerb i; switch (i) { 'i//','inv','inventory': print "take inventory"; 'l//': print "look"; 'x//': print "examine"; 'z//': print "wait"; default: rfalse; } rtrue; ]; [ LanguageVerbLikesAdverb w; if (w == 'look' or 'go' or 'push' or 'walk') rtrue; rfalse; ]; [ LanguageVerbMayBeName w; if (w == 'long' or 'short' or 'normal' or 'brief' or 'full' or 'verbose') rtrue; rfalse; ]; Default LanguageCases 1; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: The Old Library ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Darkness ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Object thedark "(darkness object)"; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Light Measurement ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ OffersLight obj j; while (obj) { if (obj has light) rtrue; objectloop (j in obj) if (HasLightSource(j)) rtrue; if ((obj has container) && (obj hasnt open) && (obj hasnt transparent)) rfalse; if ((obj provides component_parent) && (obj.component_parent)) obj = obj.component_parent; else obj = parent(obj); } rfalse; ]; [ HasLightSource i j ad sr po; if (i == 0) rfalse; if (i has light) rtrue; if ((IsSeeThrough(i)) && (~~(HidesLightSource(i)))) objectloop (j in i) if (HasLightSource(j)) rtrue; ad = i.&add_to_scope; if (parent(i) ~= 0 && ad ~= 0) { if (metaclass(ad-->0) == Routine) { ats_hls = 0; ats_flag = 1; sr = scope_reason; po = parser_one; scope_reason = LOOPOVERSCOPE_REASON; parser_one = 0; RunRoutines(i, add_to_scope); scope_reason = sr; parser_one = po; ats_flag = 0; if (ats_hls == 1) rtrue; } else { for (j=0 : (WORDSIZE*j)j) && (HasLightSource(ad-->j) == 1)) rtrue; } } if (ComponentHasLight(i)) rtrue; rfalse; ]; [ ComponentHasLight o obj next_obj; if (o provides component_child) { obj = o.component_child; while (obj) { next_obj = obj.component_sibling; if (obj has light) rtrue; if (HasLightSource(obj)) rtrue; if ((obj provides component_child) && (ComponentHasLight(obj))) rtrue; obj = next_obj; } } rfalse; ]; [ HidesLightSource obj; if (obj == player) rfalse; if (obj has transparent or supporter) rfalse; if (obj has animate) rfalse; if (obj has container) return (obj hasnt open); return (obj hasnt enterable); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Invariant ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global lightflag = false; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Adjust Light Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ADJUST_LIGHT_R previous_light_condition; previous_light_condition = lightflag; lightflag = OffersLight(parent(player)); if ((previous_light_condition == false) && (lightflag == false)) { location = thedark; rfalse; } if ((previous_light_condition == false) && (lightflag == true)) { location = real_location; CarryOutActivity(PRINTING_NEWS_OF_LIGHT_ACT); rfalse; } if ((previous_light_condition == true) && (lightflag == false)) { location = thedark; DivideParagraphPoint(); BeginActivity(PRINTING_NEWS_OF_DARKNESS_ACT); if (ForActivity(PRINTING_NEWS_OF_DARKNESS_ACT) == false) { ADJUST_LIGHT_RM('A'); new_line; } EndActivity(PRINTING_NEWS_OF_DARKNESS_ACT); rfalse; } if ((previous_light_condition == true) && (lightflag == true)) { location = real_location; rfalse; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Silent Light Consideration ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SilentlyConsiderLight; lightflag = OffersLight(parent(player)); if (lightflag) location = real_location; else location = thedark; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Translucency ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IsSeeThrough obj; if ((obj has supporter) || (obj has transparent) || (obj has animate) || ((obj has container) && (obj has open))) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Visibility Parent ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VisibilityParent o; if (o && (o has container) && (o hasnt open) && (o hasnt transparent)) return nothing; if (o) o = CoreOfParentOfCoreOf(o); return o; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Find Visibility Levels ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FindVisibilityLevels lc up; if (location == thedark) { visibility_ceiling = thedark; visibility_levels = 0; } else { visibility_ceiling = player; while (true) { up = VisibilityParent(visibility_ceiling); if (up == 0) break; visibility_ceiling = up; lc++; } visibility_levels = lc; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Touchability Ceiling ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TouchabilityCeiling original o p; o = original; while (o) { p = CoreOfParentOfCoreOf(o); if (p ofclass K1_room) return p; if (p == nothing) return o; if ((FollowRulebook(REACHING_OUTSIDE_RB, p)) && (RulebookFailed())) return p; o = p; } return o; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Scope Ceiling ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ScopeCeiling pos c; if (pos == player && location == thedark) return thedark; c = parent(pos); if (c == 0) return pos; while (VisibilityParent(c)) c = VisibilityParent(c); return c; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Object Is Untouchable ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ObjectIsUntouchable item silent_flag p save_sp decision moving x; if (LocationOf(p) ~= real_location) { for (x = CoreOf(item): x: x = CoreOfParentOfCoreOf(x)) { if (x ofclass K4_door or K7_backdrop) { moving = true; MoveFloatingObjects(LocationOf(p)); break; } } } untouchable_object = item; untouchable_silence = silent_flag; touch_persona = p; if (p == actor) touch_persona = 0; save_sp = say__p; say__p = 0; @push actor; actor = p; if (FollowRulebook(ACCESSIBILITY_RB, 0, true)) { if (RulebookSucceeded()) decision = false; else decision = true; } else decision = false; @pull actor; if (say__p == false) say__p = save_sp; if (moving) MoveFloatingObjects(); untouchable_silence = 0; return decision; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Access Through Barriers Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ACCESS_THROUGH_BARRIERS_R ancestor i j external p; p = touch_persona; if (p == 0) p = actor; ancestor = CommonAncestor(p, untouchable_object); if ((ancestor == 0) && (LocationOf(untouchable_object) == nothing) && ((untouchable_object ofclass K4_door or K7_backdrop) == false)) { if (touch_persona == 0) { if ((actor == player) && (untouchable_silence == false)) { ACCESS_THROUGH_BARRIERS_RM('A', untouchable_object); new_line; } } RulebookFails(); rtrue; } ! First, a barrier between the player and the ancestor. if (CoreOf(p) ~= ancestor) { i = parent(CoreOf(p)); j = CoreOf(i); external = false; if (j ~= i) { i = j; external = true; } while (i~=ancestor && i) { if ((external == false) && (FollowRulebook(REACHING_OUTSIDE_RB, i)) && (RulebookFailed())) rtrue; ! Barrier i = parent(CoreOf(i)); external = false; if (~~(i ofclass K5_container)) { j = CoreOf(i); if (j ~= i) { i = j; external = true; } } } } ! Second, a barrier between the item and the ancestor. if (CoreOf(untouchable_object) ~= ancestor) { ! We can always get to the core of the item. i = CoreOf(untouchable_object); ! This will be on the inside of its parent, if its parent is a ! container, so there should be no exemption. i = parent(i); external = false; while (i~=ancestor && i) { if ((external == false) && (FollowRulebook(REACHING_INSIDE_RB, i)) && (RulebookFailed())) rtrue; ! Barrier i = CoreOf(i); if (i == ancestor) break; i = parent(i); external = false; if (~~(i ofclass K5_container)) { j = CoreOf(i); if (j ~= i) { i = j; external = true; } } } } RulebookSucceeds(); ! No barrier rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Can't Reach Inside Closed Containers Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CANT_REACH_INSIDE_CLOSED_R; if (parameter_value has container && parameter_value hasnt open) { if (touch_persona == 0) { if ((actor == player) && (untouchable_silence == false)) { CANT_REACH_INSIDE_CLOSED_RM('A', parameter_value); new_line; } } RulebookFails(); rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Can't Reach Outside Closed Containers Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CANT_REACH_OUTSIDE_CLOSED_R; if (parameter_value has container && parameter_value hasnt open) { if (touch_persona == 0) { if ((actor == player) && (untouchable_silence == false)) { CANT_REACH_OUTSIDE_CLOSED_RM('A', parameter_value); new_line; } } RulebookFails(); rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Light.i6t: Can't Reach Inside Rooms Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CANT_REACH_INSIDE_ROOMS_R; if (parameter_value && parameter_value ofclass K1_room) { if (touch_persona == 0) { if ((actor == player) && (untouchable_silence == false)) { CANT_REACH_INSIDE_ROOMS_RM('A', parameter_value); new_line; } } RulebookFails(); rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Specification ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Memory ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant REQUISITION_STACK_SIZE = 3*73; Array requisition_stack --> REQUISITION_STACK_SIZE; Global requisition_stack_pointer = 0; [ RequisitionStack len top addr; top = requisition_stack_pointer + len; if (top > REQUISITION_STACK_SIZE) return false; addr = requisition_stack + requisition_stack_pointer*WORDSIZE; ! print "Allocating ", addr, " at pointer ", requisition_stack_pointer, "^"; requisition_stack_pointer = top; return addr; ]; [ FreeStack addr; if (addr == 0) return; requisition_stack_pointer = (addr - requisition_stack)/WORDSIZE; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: WriteListOfMarkedObjects ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global MarkedObjectArray = 0; Global MarkedObjectLength = 0; [ WriteListOfMarkedObjects style obj common_parent first mixed_parentage length g gc; gc = -2; objectloop (obj ofclass Object && obj has workflag2) { length++; if (first == nothing) { first = obj; common_parent = parent(obj); } else { if (parent(obj) ~= common_parent) mixed_parentage = true; } g = GetGNAOfObject(obj); g = g%3; if (gc == -2) gc = g; else if (gc ~= g) gc = -1; } if (mixed_parentage) common_parent = nothing; if (length == 0) { if (style & ISARE_BIT ~= 0) LIST_WRITER_INTERNAL_RM('W'); else if (style & CFIRSTART_BIT ~= 0) LIST_WRITER_INTERNAL_RM('X'); else LIST_WRITER_INTERNAL_RM('Y'); } else { @push MarkedObjectArray; @push MarkedObjectLength; MarkedObjectArray = RequisitionStack(length); MarkedObjectLength = length; if (MarkedObjectArray == 0) return RunTimeProblem(RTP_LISTWRITERMEMORY); if (common_parent) { ObjectTreeCoalesce(child(common_parent)); length = 0; objectloop (obj in common_parent) ! object tree order if (obj has workflag2) MarkedObjectArray-->length++ = obj; } else { length = 0; objectloop (obj ofclass Object) ! object number order if (obj has workflag2) MarkedObjectArray-->length++ = obj; } WriteListFrom(first, style, 0, false, MarkedListIterator); FreeStack(MarkedObjectArray); @pull MarkedObjectLength; @pull MarkedObjectArray; } prior_named_list = length; prior_named_list_gender = gc; return; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: List Number and Gender ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RegardingMarkedObjects obj length g gc; gc = -2; objectloop (obj ofclass Object && obj has workflag2) { length++; g = GetGNAOfObject(obj); g = g%3; if (gc == -2) { gc = g; prior_named_noun = obj; } else if (gc ~= g) gc = -1; } prior_named_list = length; prior_named_list_gender = gc; if (length == 0) { prior_named_noun = nothing; prior_named_list_gender = -1; } return; ]; [ RegardingSingleObject obj; prior_named_list = 1; prior_named_list_gender = -1; prior_named_noun = obj; ]; [ RegardingNumber n; prior_named_list = n; prior_named_list_gender = -1; prior_named_noun = nothing; ]; [ PNToVP gna; if (prior_named_noun == player) return story_viewpoint; if (prior_named_noun) gna = GetGNAOfObject(prior_named_noun); if (((gna%6)/3 == 1) || (prior_named_list >= 2)) return 6; return 3; ]; [ PrintVerbAsValue vb; if (vb == 0) print "(no verb)"; else { print "verb "; vb(1); } ]; [ VerbIsMeaningful vb; if ((vb) && (BlkValueCompare(vb(CV_MEANING), Rel_Record_0) ~= 0)) rtrue; rfalse; ]; [ VerbIsModal vb; if ((vb) && (vb(CV_MODAL))) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: List Writer Regard Storage ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array LWI_Storage --> 1 (-1) nothing; [ SetLWI a b c; LWI_Storage-->0 = a; LWI_Storage-->1 = b; LWI_Storage-->2 = c; ]; [ RegardingLWI; prior_named_list = LWI_Storage-->0; prior_named_list_gender = LWI_Storage-->1; prior_named_noun = LWI_Storage-->2; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Response Printing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ResponseViaActivity R; @push prior_named_noun; @push prior_named_list; @push prior_named_list_gender; RegardingSingleObject(nothing); CarryOutActivity(PRINTING_RESPONSE_ACT, R); @pull prior_named_list_gender; @pull prior_named_list; @pull prior_named_noun; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: About Iterator Functions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant SEEK_ITF = 0; Constant ADVANCE_ITF = 1; Constant COALESCE_ITF = 2; Constant START_ITF = 3; ! Constant DBLW; ! Uncomment this to provide debugging information at run-time ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Marked List Iterator ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MarkedListIterator obj depth required_lt function i; if (obj == nothing) return nothing; if (required_lt == 0) required_lt = EMPTY_TEXT_VALUE; switch(function) { START_ITF: return MarkedObjectArray-->0; COALESCE_ITF: return MarkedListCoalesce(); SEEK_ITF, ADVANCE_ITF: for (i=0: ii == obj) { if (function == ADVANCE_ITF) i++; for (:ii; if ((LT_Compare(required_lt, EMPTY_TEXT_VALUE) ~= 0) && (LT_Compare(obj.list_together, required_lt) ~= 0)) continue; if ((c_style & WORKFLAG_BIT) && (depth==0) && (obj hasnt workflag)) continue; if ((c_style & CONCEAL_BIT) && (ConcealedFromLists(obj))) continue; return obj; } return nothing; } } return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Concealment ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ConcealedFromLists obj c; if ((obj has concealed) || (obj has scenery)) rtrue; c = parent(obj); if ((c) && (c ofclass K5_container or K6_supporter) && (TestConcealment(c, obj))) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Coalesce Marked List ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MarkedListCoalesce o i lt l swap m; for (i=0: ii).list_together; if (LT_Compare(lt, EMPTY_TEXT_VALUE) ~= 0) { ! Find first object in list after contiguous run with this list_together value: for (i++: (ii).list_together, lt) == 0): i++) ; ! If the contiguous run extends to end of list, the list is now perfect: if (i == MarkedObjectLength) return MarkedObjectArray-->0; ! And otherwise we look to see if any future entries belong in the earlier run: for (l=i+1: ll).list_together, lt) == 0) { ! Yes, they do: so we perform a rotation to insert it before element i: swap = MarkedObjectArray-->l; for (m=l: m>i: m--) MarkedObjectArray-->m = MarkedObjectArray-->(m-1); MarkedObjectArray-->i = swap; ! And now the run is longer: i++; if (i == MarkedObjectLength) return MarkedObjectArray-->0; } i--; } } return MarkedObjectArray-->0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Object Tree Iterator ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global list_filter_routine; [ ObjectTreeIterator obj depth required_lt function; if ((obj == nothing) || (parent(obj) == nothing)) return nothing; if (function == START_ITF) obj = child(parent(obj)); if (function == COALESCE_ITF) return ObjectTreeCoalesce(obj); if (function == ADVANCE_ITF) obj = sibling(obj); if (required_lt == 0) required_lt = EMPTY_TEXT_VALUE; for (:: obj = sibling(obj)) { if (obj == nothing) return nothing; !if (function == ADVANCE_ITF) print "Considering ", (the) obj, ": ", (TEXT_TY_Say) obj.list_together, ": ", (TEXT_TY_Say) required_lt, ": ", ": ", (TEXT_TY_Say) lt_value, ": ", LT_Compare(obj.list_together, required_lt), "^"; if ((LT_Compare(required_lt, EMPTY_TEXT_VALUE) ~= 0) && (LT_Compare(obj.list_together, required_lt) ~= 0)) continue; if ((c_style & WORKFLAG_BIT) && (depth==0) && (obj hasnt workflag)) continue; if (obj hasnt list_filter_permits) continue; if ((c_style & CONCEAL_BIT) && (ConcealedFromLists(obj))) continue; return obj; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Coalesce Object Tree ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ObjectTreeCoalesce obj memb lt later; #Ifdef DBLW; print "^^Sorting out: "; DiagnoseSortList(obj); #Endif; .StartAgain; for (memb=obj: memb~=nothing: memb=sibling(memb)) { lt = memb.list_together; if (LT_Compare(lt, EMPTY_TEXT_VALUE) ~= 0) { ! Find first object in list after contiguous run with this list_together value: for (memb=sibling(memb): (memb) && (LT_Compare(memb.list_together, lt) == 0): memb = sibling(memb)) ; ! If the contiguous run extends to end of list, the list is now perfect: if (memb == 0) return obj; ! And otherwise we look to see if any future entries belong in the earlier run: for (later=sibling(memb): later: later=sibling(later)) if (LT_Compare(later.list_together, lt) == 0) { ! Yes, they do: so we perform a regrouping of the list and start again: obj = GroupChildren(parent(obj), lt); #Ifdef DBLW; print "^^Sorted to: "; DiagnoseSortList(obj); #Endif; jump StartAgain; } } } return obj; ]; #Ifdef DBLW; [ DiagnoseSortList obj memb; for (memb=child(obj): memb~=nothing: memb=sibling(memb)) print memb, " --> "; new_line; ]; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: WriteListFrom ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WriteListFrom first style depth noactivity iter a ol; @push c_iterator; @push c_style; @push c_depth; @push c_margin; if (iter) c_iterator = iter; else c_iterator = ObjectTreeIterator; c_style = style; c_depth = depth; c_margin = 0; if (style & EXTRAINDENT_BIT) c_margin = 1; objectloop (a ofclass Object) { give a list_filter_permits; if ((list_filter_routine) && (list_filter_routine(a) == false)) give a ~list_filter_permits; } first = c_iterator(first, depth, 0, START_ITF); if (first == nothing) { if (style & ISARE_BIT ~= 0) LIST_WRITER_INTERNAL_RM('W'); else LIST_WRITER_INTERNAL_RM('Y'); if (style & NEWLINE_BIT ~= 0) new_line; } else { if ((noactivity) || (iter)) { WriteListR(first, c_depth, true); say__p = 1; } else { objectloop (ol provides list_together) BlkValueCopy(ol.list_together, EMPTY_TEXT_VALUE); CarryOutActivity(LISTING_CONTENTS_ACT, parent(first)); } } @pull c_margin; @pull c_depth; @pull c_style; @pull c_iterator; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Standard Contents Listing Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STANDARD_CONTENTS_LISTING_R; WriteListFrom(child(parameter_value), c_style, c_depth, true); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Partitioning ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef DBLW; Global DBLW_no_classes; Global DBLW_no_objs; [ DebugPartition partition_class_sizes partition_classes first depth i k o; print "[Length of list is ", DBLW_no_objs, " with ", k, " plural.]^"; print "[Partitioned into ", DBLW_no_classes, " equivalence classes.]^"; for (i=1: i<=DBLW_no_classes : i++) { print "Class ", i, " has size ", partition_class_sizes->i, "^"; } for (k=0, o=first: kk, " represented by ", o, " with L=", o.list_together, "^"; } ]; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Partition List ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PartitionList first no_objs depth partition_classes partition_class_sizes i k l n m; for (i=0: ii = 0; n = 1; for (i=first, k=0: kk == 0) { partition_classes->k = n; partition_class_sizes->n = 1; for (l=c_iterator(i, depth, lt_value, ADVANCE_ITF), m=k+1: (l~=0) && (mm == 0) && (ListEqual(i, l))) { if (partition_class_sizes->n < 255) (partition_class_sizes->n)++; partition_classes->m = n; } } if (n < 255) n++; } n--; #Ifdef DBLW; DBLW_no_classes = n; DBLW_no_objs = no_objs; DebugPartition(partition_class_sizes, partition_classes, first, depth); #Endif; return n; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Equivalence Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ListEqual o1 o2; if ((o1.plural == 0) || (o2.plural == 0)) rfalse; if (child(o1) ~= 0 && WillRecurs(o1) ~= 0) rfalse; if (child(o2) ~= 0 && WillRecurs(o2) ~= 0) rfalse; if (c_style & (FULLINV_BIT + PARTINV_BIT) ~= 0) { if ((o1 hasnt worn && o2 has worn) || (o2 hasnt worn && o1 has worn)) rfalse; if ((o1 hasnt light && o2 has light) || (o2 hasnt light && o1 has light)) rfalse; if (o1 has container) { if (o2 hasnt container) rfalse; if ((o1 has open && o2 hasnt open) || (o2 has open && o1 hasnt open)) rfalse; } else if (o2 has container) rfalse; } return Identical(o1, o2); ]; [ WillRecurs o; if (c_style & ALWAYS_BIT ~= 0) rtrue; if (c_style & RECURSE_BIT == 0) rfalse; if ((o has supporter) || ((o has container) && (o has open or transparent))) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Grouping ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NumberOfGroupsInList o no_classes depth partition_classes partition_class_sizes no_groups cl memb k current_lt lt; current_lt = EMPTY_TEXT_VALUE; lt = EMPTY_TEXT_VALUE; no_groups = no_classes; for (cl=1, memb=o, k=0: cl<=no_classes: cl++) { ! Advance to first member of class number cl while (partition_classes->k ~= cl) { k++; memb = c_iterator(memb, depth, lt_value, ADVANCE_ITF); } if (memb) { ! In case of accidents, but should always happen lt = memb.list_together; if ((LT_Compare(lt, lt_value) ~= 0) && (LT_Compare(lt, EMPTY_TEXT_VALUE) ~= 0) && (LT_Compare(lt, current_lt) == 0)) { no_groups--; } current_lt = lt; } } #Ifdef DBLW; print "[There are ", no_groups, " groups.]^"; #Endif; return no_groups; ]; [ LT_Compare lt1 lt2; if (lt1 == lt2) return 0; if (lt1 == 0) lt1 = EMPTY_TEXT_VALUE; if (lt2 == 0) lt2 = EMPTY_TEXT_VALUE; if (TEXT_TY_IsSubstituted(lt1) == false) { if (TEXT_TY_IsSubstituted(lt2) == false) return (lt1-->1)-(lt2-->1); return -1; } if (TEXT_TY_IsSubstituted(lt2) == false) { return -1; } return BlkValueCompare(lt1, lt2); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Write List Recursively ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WriteListR o depth from_start partition_classes partition_class_sizes cl memb index k2 l m no_classes q groups_to_do current_lt; if (o == nothing) return; ! An empty list: no output if (from_start) { o = c_iterator(o, depth, 0, COALESCE_ITF); ! Coalesce list and choose new start } o = c_iterator(o, depth, 0, SEEK_ITF); ! Find first entry in list from o if (o == nothing) return; ! Count index = length of list for (memb=o, index=0: memb: memb=c_iterator(memb, depth, lt_value, ADVANCE_ITF)) index++; if (c_style & ISARE_BIT ~= 0) { SetLWI(index, -1, o); LIST_WRITER_INTERNAL_RM('V', o); if (c_style & NEWLINE_BIT ~= 0) print ":^"; else print (char) ' '; c_style = c_style - ISARE_BIT; } partition_classes = RequisitionStack(index/WORDSIZE + 2); partition_class_sizes = RequisitionStack(index/WORDSIZE + 2); if ((partition_classes == 0) || (partition_class_sizes == 0)) return RunTimeProblem(RTP_LISTWRITERMEMORY); no_classes = PartitionList(o, index, depth, partition_classes, partition_class_sizes); groups_to_do = NumberOfGroupsInList(o, no_classes, depth, partition_classes, partition_class_sizes); for (cl=1, memb=o, index=0, current_lt=EMPTY_TEXT_VALUE: groups_to_do>0: cl++) { ! Set memb to first object of partition class cl while (partition_classes->index ~= cl) { index++; memb=c_iterator(memb, depth, lt_value, ADVANCE_ITF); if (memb==0) { print "*** Error in list-writer ***^"; return; } } #Ifdef DBLW; ! DebugPartition(partition_class_sizes, partition_classes, o, depth); print "^[Class ", cl, " of ", no_classes, ": first object ", memb, " (", memb.list_together, "); groups_to_do ", groups_to_do, ", current_lt=", current_lt, " listing_size=", listing_size, " lt_value=", lt_value, " memb.list_together=", memb.list_together, "]^"; #Endif; if ((LT_Compare(memb.list_together, lt_value) == 0) || (LT_Compare(memb.list_together, EMPTY_TEXT_VALUE) == 0)) current_lt = EMPTY_TEXT_VALUE; else { if (LT_Compare(memb.list_together, current_lt) == 0) continue; ! Otherwise this class begins a new group @push listing_size; q = memb; listing_size = 1; l = index; m = cl; while (m < no_classes && (LT_Compare(q.list_together, memb.list_together) == 0)) { m++; while (partition_classes->l ~= m) { l++; q = c_iterator(q, depth, lt_value, ADVANCE_ITF); } if (LT_Compare(q.list_together, memb.list_together) == 0) listing_size++; } if (listing_size > 1) { ! The new group contains more than one partition class WriteMultiClassGroup(cl, memb, depth, partition_class_sizes); current_lt = memb.list_together; jump GroupComplete; } current_lt = EMPTY_TEXT_VALUE; @pull listing_size; } WriteSingleClassGroup(cl, memb, depth, partition_class_sizes->cl); .GroupComplete; groups_to_do--; if (c_style & ENGLISH_BIT ~= 0) { if (groups_to_do == 1) { #ifdef SERIAL_COMMA; if (cl > 1) print ","; #endif; LIST_WRITER_INTERNAL_RM('C'); } if (groups_to_do > 1) print ", "; } } FreeStack(partition_class_sizes); FreeStack(partition_classes); ]; ! end of WriteListR ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Write Multiple Class Group ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WriteMultiClassGroup cl memb depth partition_class_sizes pv q k2 l; ! Save the style, because the activity below is allowed to change it q = c_style; if (c_style & INDENT_BIT ~= 0) PrintSpaces(2*(depth+c_margin)); BeginActivity(GROUPING_TOGETHER_ACT, memb); if (ForActivity(GROUPING_TOGETHER_ACT, memb)) { c_style = c_style &~ NEWLINE_BIT; } else { pv = memb.list_together; if (TEXT_TY_IsSubstituted(pv) == false) { inventory_stage = 1; parser_one = memb; parser_two = depth + c_margin; if ((pv-->1)() == 1) jump Omit__Sublist2; } else if (pv) { ! Set k2 to the number of objects covered by the group k2 = 0; for (l=0 : l(l+cl); EnglishNumber(k2); print " "; print (TEXT_TY_Say) pv; if (c_style & ENGLISH_BIT ~= 0) print " ("; if (c_style & INDENT_BIT ~= 0) print ":^"; } c_margin++; @push lt_value; @push listing_together; @push listing_size; lt_value = memb.list_together; listing_together = memb; #Ifdef DBLW; print "^^DOWN lt_value = ", lt_value, " listing_together = ", memb, "^^"; @push DBLW_no_classes; @push DBLW_no_objs; #Endif; WriteListR(memb, depth, false); #Ifdef DBLW; print "^^UP^^"; @pull DBLW_no_objs; @pull DBLW_no_classes; #Endif; @pull listing_size; @pull listing_together; @pull lt_value; c_margin--; pv = memb.list_together; if (TEXT_TY_IsSubstituted(pv) == false) { inventory_stage = 2; parser_one = memb; parser_two = depth+c_margin; (pv-->1)(); } else if (LT_Compare(pv, EMPTY_TEXT_VALUE) ~= 0) { if (q & ENGLISH_BIT ~= 0) print ")"; } .Omit__Sublist2; } EndActivity(GROUPING_TOGETHER_ACT, memb); ! If the NEWLINE_BIT has been forced by the activity, act now ! before it vanishes... if (q & NEWLINE_BIT ~= 0 && c_style & NEWLINE_BIT == 0) new_line; ! ...when the original style is restored again: c_style = q; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Write Single Class Group ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WriteSingleClassGroup cl memb depth size q; q = c_style; if (c_style & INDENT_BIT) PrintSpaces(2*(depth+c_margin)); if (size == 1) { if (c_style & NOARTICLE_BIT ~= 0) print (name) memb; else { if (c_style & DEFART_BIT) { if ((cl == 1) && (c_style & CFIRSTART_BIT)) print (The) memb; else print (the) memb; } else { if ((cl == 1) && (c_style & CFIRSTART_BIT)) print (CIndefArt) memb; else print (a) memb; } } } else { if (c_style & DEFART_BIT) { if ((cl == 1) && (c_style & CFIRSTART_BIT)) PrefaceByArticle(memb, 0, size); else PrefaceByArticle(memb, 1, size); } @push listing_size; listing_size = size; CarryOutActivity(PRINTING_A_NUMBER_OF_ACT, memb); @pull listing_size; } if ((size > 1) && (memb hasnt pluralname)) { give memb pluralname; WriteAfterEntry(memb, depth); give memb ~pluralname; } else WriteAfterEntry(memb, depth); c_style = q; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Write After Entry ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WriteAfterEntry o depth p recurse_flag parenth_flag eldest_child child_count combo; inventory_stage = 2; if (c_style & PARTINV_BIT) { BeginActivity(PRINTING_ROOM_DESC_DETAILS_ACT, o); if (ForActivity(PRINTING_ROOM_DESC_DETAILS_ACT, o) == false) { combo = 0; if (o has light && location hasnt light) combo=combo+1; if (o has container && o hasnt open) combo=combo+2; if ((o has container && (o has open || o has transparent)) && (child(o)==0)) combo=combo+4; if (combo) LIST_WRITER_INTERNAL_RM('A'); ! space and open bracket switch (combo) { 1: LIST_WRITER_INTERNAL_RM('D', o); 2: LIST_WRITER_INTERNAL_RM('E', o); 3: LIST_WRITER_INTERNAL_RM('H', o); 4: LIST_WRITER_INTERNAL_RM('F', o); 5: LIST_WRITER_INTERNAL_RM('I', o); 6: LIST_WRITER_INTERNAL_RM('G', o); 7: LIST_WRITER_INTERNAL_RM('J', o); } if (combo) LIST_WRITER_INTERNAL_RM('B'); ! close bracket } EndActivity(PRINTING_ROOM_DESC_DETAILS_ACT, o); } ! end of PARTINV_BIT processing if (c_style & FULLINV_BIT) { BeginActivity(PRINTING_INVENTORY_DETAILS_ACT, o); if (ForActivity(PRINTING_INVENTORY_DETAILS_ACT, o) == false) { if (o has light && o has worn) { LIST_WRITER_INTERNAL_RM('A'); LIST_WRITER_INTERNAL_RM('K', o); parenth_flag = true; } else { if (o has light) { LIST_WRITER_INTERNAL_RM('A'); LIST_WRITER_INTERNAL_RM('D', o); parenth_flag = true; } if (o has worn) { LIST_WRITER_INTERNAL_RM('A'); LIST_WRITER_INTERNAL_RM('L', o); parenth_flag = true; } } if (o has container) if (o has openable) { if (parenth_flag) { #Ifdef SERIAL_COMMA; print ","; #Endif; LIST_WRITER_INTERNAL_RM('C'); } else LIST_WRITER_INTERNAL_RM('A', o); if (o has open) if (child(o)) LIST_WRITER_INTERNAL_RM('M', o); else LIST_WRITER_INTERNAL_RM('N', o); else if (o has lockable && o has locked) LIST_WRITER_INTERNAL_RM('P', o); else LIST_WRITER_INTERNAL_RM('O', o); parenth_flag = true; } else if (child(o)==0 && o has transparent) if (parenth_flag) { LIST_WRITER_INTERNAL_RM('C'); LIST_WRITER_INTERNAL_RM('F'); } else { LIST_WRITER_INTERNAL_RM('A'); LIST_WRITER_INTERNAL_RM('F'); LIST_WRITER_INTERNAL_RM('B'); } if (parenth_flag) LIST_WRITER_INTERNAL_RM('B'); } EndActivity(PRINTING_INVENTORY_DETAILS_ACT, o); } ! end of FULLINV_BIT processing child_count = 0; eldest_child = nothing; objectloop (p in o) if ((c_style & CONCEAL_BIT == 0) || (ConcealedFromLists(p) == false)) if (p has list_filter_permits) { child_count++; if (eldest_child == nothing) eldest_child = p; } if (child_count && (c_style & ALWAYS_BIT)) { if (c_style & ENGLISH_BIT) { print " "; LIST_WRITER_INTERNAL_RM('Q', o); print " "; } recurse_flag = true; } if (child_count && (c_style & RECURSE_BIT)) { if (o has supporter) { if (c_style & ENGLISH_BIT) { if (c_style & TERSE_BIT) { LIST_WRITER_INTERNAL_RM('A', o); LIST_WRITER_INTERNAL_RM('R', o); } else LIST_WRITER_INTERNAL_RM('S', o); } recurse_flag = true; } if (o has container && (o has open || o has transparent)) { if (c_style & ENGLISH_BIT) { if (c_style & TERSE_BIT) { LIST_WRITER_INTERNAL_RM('A', o); LIST_WRITER_INTERNAL_RM('T', o); } else LIST_WRITER_INTERNAL_RM('U', o); } recurse_flag = true; } } if (recurse_flag && (c_style & ENGLISH_BIT)) { SetLWI(child_count, -1, eldest_child); LIST_WRITER_INTERNAL_RM('V', o); print " "; } if (c_style & NEWLINE_BIT) new_line; if (recurse_flag) { o = child(o); @push lt_value; @push listing_together; @push listing_size; @push c_iterator; c_iterator = ObjectTreeIterator; lt_value = EMPTY_TEXT_VALUE; listing_together = 0; listing_size = 0; WriteListR(o, depth+1, true); @pull c_iterator; @pull listing_size; @pull listing_together; @pull lt_value; if (c_style & TERSE_BIT) LIST_WRITER_INTERNAL_RM('B'); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ListWriter.i6t: Internal Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_WRITER_INTERNAL_R; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: Saying Phrases ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SayPhraseName closure; if (closure == 0) print "nothing"; else print (string) closure-->2; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: Kinds ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ KindAtomic kind; if ((kind >= 0) && (kind < BASE_KIND_HWM)) return kind; return kind-->0; ]; [ KindBaseArity kind; if ((kind >= 0) && (kind < BASE_KIND_HWM)) return 0; return kind-->1; ]; [ KindBaseTerm kind n; if ((kind >= 0) && (kind < BASE_KIND_HWM)) return UNKNOWN_TY; return kind-->(2+n); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: DigitToValue ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DigitToValue c n; n = c-'0'; if ((n<0) || (n>9)) return -1; return n; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: GenerateRandomNumber ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GenerateRandomNumber n m s; if (n==m) return n; if (n>m) { s = n; n = m; m = s; } n--; return random(m-n) + n; ]; Constant R_DecimalNumber = GenerateRandomNumber; Constant R_PrintTimeOfDay = GenerateRandomNumber; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: GroupChildren ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GroupChildren par value; while (child(par) ~= 0) { if (LT_Compare(child(par).list_together, value) ~= 0) move child(par) to out_obj; else move child(par) to in_obj; } while (child(in_obj) ~= 0) move child(in_obj) to par; while (child(out_obj) ~= 0) move child(out_obj) to par; return child(par); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: PrintSpaces ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintSpaces n; while (n > 0) { print " "; n = n - 1; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: RunRoutines ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RunRoutines obj prop; if (obj == thedark) obj = real_location; if ((obj.&prop == 0) && (prop >= INDIV_PROP_START)) rfalse; return obj.prop(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: SwapWorkflags ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SwapWorkflags obj lst; objectloop (obj ofclass Object) { lst = false; if (obj has workflag2) lst = true; give obj ~workflag2; if (obj has workflag) give obj workflag2; give obj ~workflag; if (lst) give obj workflag; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: TestUseOption ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant NO_USE_OPTIONS = 29; [ TestUseOption UO ! Implied call parameter ; if (UO == 1) rtrue; if (UO == 2) rtrue; if (UO == 3) rtrue; if (UO == 4) rtrue; rfalse; ]; [ PrintUseOption UO ! Implied call parameter ; switch(UO) { 0: print "ineffectual option"; 1: print "dynamic memory allocation option [8192]"; 2: print "maximum text length option [1024]"; 3: print "index figure thumbnails option [50]"; 4: print "maximum things understood at once option [100]"; 5: print "American dialect option"; 6: print "serial comma option"; 7: print "full-length room descriptions option"; 8: print "abbreviated room descriptions option"; 9: print "memory economy option"; 10: print "authorial modesty option"; 11: print "scoring option"; 12: print "no scoring option"; 13: print "engineering notation option"; 14: print "unabbreviated object names option"; 15: print "command line echoing option"; 16: print "manual pronouns option"; 17: print "undo prevention option"; 18: print "predictable randomisation option"; 19: print "fast route-finding option"; 20: print "slow route-finding option"; 21: print "numbered rules option"; 22: print "telemetry recordings option"; 23: print "no deprecated features option"; 24: print "gn testing version option"; 25: print "VERBOSE room descriptions option"; 26: print "BRIEF room descriptions option"; 27: print "SUPERBRIEF room descriptions option"; 28: print "sequential action option"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: IntegerDivide ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IntegerDivide A B; if (B == 0) { RunTimeProblem(RTP_DIVZERO); rfalse; } return A/B; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: IntegerRemainder ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IntegerRemainder A B; if (B == 0) { RunTimeProblem(RTP_DIVZERO); rfalse; } return A%B; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: UnsignedCompare ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ UnsignedCompare x y u v; #Ifdef TARGET_GLULX; @jleu x y ?lesseq; return 1; .lesseq; @jeq x y ?equal; return -1; .equal; return 0; #Ifnot; if (x == y) return 0; if (x < 0 && y >= 0) return 1; if (x >= 0 && y < 0) return -1; u = x&~WORD_HIGHBIT; v= y&~WORD_HIGHBIT; if (u > v) return 1; return -1; #Endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: SignedCompare ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SignedCompare x y; if (x > y) return 1; if (x == y) return 0; return -1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: ZRegion ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ZRegion addr; switch (metaclass(addr)) { nothing: return 0; Object, Class: return 1; Routine: return 2; String: return 3; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: Memcpy ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Memcpy to_addr from_addr size n; #Ifdef TARGET_ZCODE; for (n = size/WORDSIZE: (n--) > 0: ) to_addr-->n = from_addr-->n; for (n = size: ((n--) % WORDSIZE ~= 0): ) to_addr->n = from_addr->n; #Ifnot; ! TARGET_GLULX @mcopy size from_addr to_addr; #Endif; ! TARGET_ ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Utilities.i6t: Arrcpy ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Arrcpy to_array to_entry_size from_array from_entry_size no_entries n val; if (to_entry_size == from_entry_size) Memcpy(to_array, from_array, to_entry_size*no_entries); else if ((to_entry_size == 2) && (from_entry_size == 4)) { for (n = 0: nn; to_array->0 = (val/256)%256; to_array->1 = val%256; to_array = to_array + 2; } } else "*** Arrcpy doesn't support this ***"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Parser ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Object InformParser "(Inform Parser)" has proper; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Grammar Line Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global best_etype; ! Preferred error number so far Global nextbest_etype; ! Preferred one, if ASKSCOPE_PE disallowed Global parser_inflection; ! A property (usually "name") to find object names in Array pattern --> 32; ! For the current pattern match Global pcount; ! and a marker within it Array pattern2 --> 32; ! And another, which stores the best match Global pcount2; ! so far Array line_ttype-->32; ! For storing an analysed grammar line Array line_tdata-->32; Array line_token-->32; Global nsns; ! Number of special_numbers entered so far Global params_wanted; ! Number of parameters needed (which may change in parsing) Global inferfrom; ! The point from which the rest of the command must be inferred Global inferword; ! And the preposition inferred Global dont_infer; ! Another dull flag Global cobj_flag = 0; Global oops_from; ! The "first mistake" word number Global saved_oops; ! Used in working this out Array oops_workspace -> 64; ! Used temporarily by "oops" routine Global held_back_mode; ! Flag: is there some input from last time Global hb_wn; ! left over? (And a save value for wn.) ! (Used for full stops and "then".) Global usual_grammar_after; ! Point from which usual grammar is parsed (it may vary from ! the above if user's routines match multi-word verbs) ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Grammar Token Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant PATTERN_NULL = $ffff; ! Entry for a token producing no text Global found_ttype; ! Used to break up tokens into type Global found_tdata; ! and data (by AnalyseToken) Global token_filter; ! For noun filtering by user routines Global length_of_noun; ! Set by NounDomain to no of words in noun Global lookahead; ! The token after the one now being matched Global multi_mode; ! Multiple mode Global multi_wanted; ! Number of things needed in multitude Global multi_had; ! Number of things actually found Global multi_context; ! What token the multi-obj was accepted for Global indef_mode; ! "Indefinite" mode - ie, "take a brick" ! is in this mode Global indef_type; ! Bit-map holding types of specification Global indef_wanted; ! Number of items wanted (INDEF_ALL_WANTED for all) Constant INDEF_ALL_WANTED = 32767; Global indef_guess_p; ! Plural-guessing flag Global indef_owner; ! Object which must hold these items Global indef_cases; ! Possible gender and numbers of them Global indef_possambig; ! Has a possibly dangerous assumption ! been made about meaning of a descriptor? Global indef_nspec_at; ! Word at which a number like "two" was parsed ! (for backtracking) Global allow_plurals; ! Whether plurals presently allowed or not Global take_all_rule; ! Slightly different rules apply to "take all" than other uses ! of multiple objects, to make adjudication produce more ! pragmatically useful results ! (Not a flag: possible values 0, 1, 2) Global dict_flags_of_noun; ! Of the noun currently being parsed ! (a bitmap in #dict_par1 format) Global pronoun__word; ! Saved value Global pronoun__obj; ! Saved value Constant comma_word = 'comma,'; ! An "untypeable word" used to substitute ! for commas in parse buffers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Match List Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array match_list --> MATCH_LIST_WORDS; ! An array of matched objects so far Array match_classes --> MATCH_LIST_WORDS; ! An array of equivalence classes for them Array match_scores --> MATCH_LIST_WORDS; ! An array of match scores for them Global number_matched; ! How many items in it? (0 means none) Global number_of_classes; ! How many equivalence classes? Global match_length; ! How many words long are these matches? Global match_from; ! At what word of the input do they begin? ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Words ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef TARGET_ZCODE; [ WordCount; return parse->1; ]; [ WordAddress wordnum; return buffer + parse->(wordnum*4+1); ]; [ WordLength wordnum; return parse->(wordnum*4); ]; #Ifnot; [ WordCount; return parse-->0; ]; [ WordAddress wordnum; return buffer + parse-->(wordnum*3); ]; [ WordLength wordnum; return parse-->(wordnum*3-1); ]; #Endif; [ WordFrom w p i j wc; #Ifdef TARGET_ZCODE; wc = p->1; i = w*2-1; #Ifnot; wc = p-->0; i = w*3-2; #Endif; if ((w < 1) || (w > wc)) return 0; j = p-->i; if (j == ',//') j = comma_word; if (j == './/') j = THEN1__WD; return j; ]; [ NextWord i j wc; #Ifdef TARGET_ZCODE; wc = parse->1; i = wn*2-1; #Ifnot; wc = parse-->0; i = wn*3-2; #Endif; wn++; if ((wn < 2) || (wn > wc+1)) return 0; j = parse-->i; if (j == ',//') j = comma_word; if (j == './/') j = THEN1__WD; return j; ]; [ NextWordStopped wc; #Ifdef TARGET_ZCODE; wc = parse->1; #Ifnot; wc = parse-->0; #Endif; if ((wn < 1) || (wn > wc)) { wn++; return -1; } return NextWord(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Snippets ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintSnippet snip from to i w1 w2; w1 = snip/100; w2 = w1 + (snip%100) - 1; if ((w2WordCount())) { if ((w1 == 1) && (w2 == 0)) rfalse; return RunTimeProblem(RTP_SAYINVALIDSNIPPET, w1, w2); } from = WordAddress(w1); to = WordAddress(w2) + WordLength(w2) - 1; for (i=from: i<=to: i++) print (char) i->0; ]; [ SpliceSnippet snip t i w1 w2 nextw at endsnippet newlen; w1 = snip/100; w2 = w1 + (snip%100) - 1; if ((w20 = 120; newlen = VM_PrintToBuffer(buffer2, 120, SpliceSnippet__TextPrinter, t, endsnippet); for (i=0: (i(at+i) = buffer2->(WORDSIZE+i); #Ifdef TARGET_ZCODE; buffer->1 = at+i; #ifnot; buffer-->0 = at+i; #endif; for (:at+i<120:i++) buffer->(at+i) = ' '; VM_Tokenise(buffer, parse); players_command = 100 + WordCount(); @pull say__pc; @pull say__p; ]; [ SpliceSnippet__TextPrinter t endsnippet; TEXT_TY_Say(t); if (endsnippet) { print " "; PrintSnippet(endsnippet); } ]; [ SnippetIncludes test snippet w1 w2 wlen i j; w1 = snippet/100; w2 = w1 + (snippet%100) - 1; if ((w20: i++, j--) { if (((test)(i, 0)) ~= GPR_FAIL) return i*100+wn-i; } } rfalse; ]; [ SnippetMatches snippet topic_gpr rv; wn=1; if (topic_gpr == 0) rfalse; if (metaclass(topic_gpr) == Routine) { rv = (topic_gpr)(snippet/100, snippet%100); if (rv ~= GPR_FAIL) rtrue; rfalse; } RunTimeProblem(RTP_BADTOPIC); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Unpacking Grammar Lines ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ UnpackGrammarLine line_address i size; for (i=0 : i<32 : i++) { line_token-->i = ENDIT_TOKEN; line_ttype-->i = ELEMENTARY_TT; line_tdata-->i = ENDIT_TOKEN; } #Ifdef TARGET_ZCODE; action_to_be = 256*(line_address->0) + line_address->1; action_reversed = ((action_to_be & $400) ~= 0); action_to_be = action_to_be & $3ff; line_address--; size = 3; #Ifnot; ! GLULX @aloads line_address 0 action_to_be; action_reversed = (((line_address->2) & 1) ~= 0); line_address = line_address - 2; size = 5; #Endif; params_wanted = 0; for (i=0 : : i++) { line_address = line_address + size; if (line_address->0 == ENDIT_TOKEN) break; line_token-->i = line_address; AnalyseToken(line_address); if (found_ttype ~= PREPOSITION_TT) params_wanted++; line_ttype-->i = found_ttype; line_tdata-->i = found_tdata; } return line_address + 1; ]; [ AnalyseToken token; if (token == ENDIT_TOKEN) { found_ttype = ELEMENTARY_TT; found_tdata = ENDIT_TOKEN; return; } found_ttype = (token->0) & $$1111; found_tdata = (token+1)-->0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Extracting Verb Numbers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DictionaryWordToVerbNum dword verbnum; #Ifdef TARGET_ZCODE; verbnum = $ff-(dword->#dict_par2); #Ifnot; ! GLULX dword = dword + #dict_par2 - 1; @aloads dword 0 verbnum; verbnum = $ffff-verbnum; #Endif; return verbnum; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Keyboard Primitive ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ KeyboardPrimitive a_buffer a_table; #Ifdef DEBUG; #Iftrue (0 > 0); return TestKeyboardPrimitive(a_buffer, a_table); #Endif; #Endif; return VM_ReadKeyboard(a_buffer, a_table); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Reading the Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Keyboard a_buffer a_table nw i w w2 x1 x2; sline1 = score; sline2 = turns; while (true) { ! Save the start of the buffer, in case "oops" needs to restore it for (i=0 : i<64 : i++) oops_workspace->i = a_buffer->i; ! In case of an array entry corruption that shouldn't happen, but would be ! disastrous if it did: #Ifdef TARGET_ZCODE; a_buffer->0 = INPUT_BUFFER_LEN; a_table->0 = 15; ! Allow to split input into this many words #Endif; ! TARGET_ ! Print the prompt, and read in the words and dictionary addresses PrintPrompt(); DrawStatusLine(); KeyboardPrimitive(a_buffer, a_table); ! Set nw to the number of words #Ifdef TARGET_ZCODE; nw = a_table->1; #Ifnot; nw = a_table-->0; #Endif; ! If the line was blank, get a fresh line if (nw == 0) { @push etype; etype = BLANKLINE_PE; players_command = 100; BeginActivity(PRINTING_A_PARSER_ERROR_ACT); if (ForActivity(PRINTING_A_PARSER_ERROR_ACT) == false) { PARSER_ERROR_INTERNAL_RM('X', noun); new_line; } EndActivity(PRINTING_A_PARSER_ERROR_ACT); @pull etype; continue; } ! Unless the opening word was OOPS, return ! Conveniently, a_table-->1 is the first word on both the Z-machine and Glulx w = a_table-->1; if (w == OOPS1__WD or OOPS2__WD or OOPS3__WD) { if (oops_from == 0) { PARSER_COMMAND_INTERNAL_RM('A'); new_line; continue; } if (nw == 1) { PARSER_COMMAND_INTERNAL_RM('B'); new_line; continue; } if (nw > 2) { PARSER_COMMAND_INTERNAL_RM('C'); new_line; continue; } ! So now we know: there was a previous mistake, and the player has ! attempted to correct a single word of it. for (i=0 : ii = a_buffer->i; #Ifdef TARGET_ZCODE; x1 = a_table->9; ! Start of word following "oops" x2 = a_table->8; ! Length of word following "oops" #Ifnot; ! TARGET_GLULX x1 = a_table-->6; ! Start of word following "oops" x2 = a_table-->5; ! Length of word following "oops" #Endif; ! TARGET_ ! Repair the buffer to the text that was in it before the "oops" ! was typed: for (i=0 : i<64 : i++) a_buffer->i = oops_workspace->i; VM_Tokenise(a_buffer,a_table); ! Work out the position in the buffer of the word to be corrected: #Ifdef TARGET_ZCODE; w = a_table->(4*oops_from + 1); ! Start of word to go w2 = a_table->(4*oops_from); ! Length of word to go #Ifnot; ! TARGET_GLULX w = a_table-->(3*oops_from); ! Start of word to go w2 = a_table-->(3*oops_from - 1); ! Length of word to go #Endif; ! TARGET_ ! Write spaces over the word to be corrected: for (i=0 : i(i+w) = ' '; if (w2 < x2) { ! If the replacement is longer than the original, move up... for (i=INPUT_BUFFER_LEN-1 : i>=w+x2 : i--) a_buffer->i = a_buffer->(i-x2+w2); ! ...increasing buffer size accordingly. #Ifdef TARGET_ZCODE; a_buffer->1 = (a_buffer->1) + (x2-w2); #Ifnot; ! TARGET_GLULX a_buffer-->0 = (a_buffer-->0) + (x2-w2); #Endif; ! TARGET_ } ! Write the correction in: for (i=0 : i(i+w) = buffer2->(i+x1); VM_Tokenise(a_buffer, a_table); #Ifdef TARGET_ZCODE; nw = a_table->1; #Ifnot; nw = a_table-->0; #Endif; return nw; } ! Undo handling if ((w == UNDO1__WD or UNDO2__WD or UNDO3__WD) && (nw==1)) { Perform_Undo(); continue; } i = VM_Save_Undo(); #ifdef PREVENT_UNDO; undo_flag = 0; #endif; #ifndef PREVENT_UNDO; undo_flag = 2; #endif; if (i == -1) undo_flag = 0; if (i == 0) undo_flag = 1; if (i == 2) { VM_RestoreWindowColours(); VM_Style(SUBHEADER_VMSTY); SL_Location(); print "^"; ! print (name) location, "^"; VM_Style(NORMAL_VMSTY); IMMEDIATELY_UNDO_RM('E'); new_line; continue; } return nw; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Proper ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Parser__parse syntax line num_lines line_address i j k token l m inferred_go; cobj_flag = 0; parser_results-->ACTION_PRES = 0; parser_results-->NO_INPS_PRES = 0; parser_results-->INP1_PRES = 0; parser_results-->INP2_PRES = 0; meta = false; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter A ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== if (held_back_mode) { held_back_mode = false; wn = hb_wn; if (verb_wordnum > 0) i = WordAddress(verb_wordnum); else i = WordAddress(1); j = WordAddress(wn); if (i<=j) for (: i0 = ' '; i = NextWord(); if (i == AGAIN1__WD or AGAIN2__WD or AGAIN3__WD) { ! Delete the words "then again" from the again buffer, ! in which we have just realised that it must occur: ! prevents an infinite loop on "i. again" i = WordAddress(wn-2)-buffer; if (wn > num_words) j = INPUT_BUFFER_LEN-1; else j = WordAddress(wn)-buffer; for (: ii = ' '; } VM_Tokenise(buffer, parse); jump ReParse; } .ReType; cobj_flag = 0; actors_location = ScopeCeiling(player); BeginActivity(READING_A_COMMAND_ACT); if (ForActivity(READING_A_COMMAND_ACT)==false) { Keyboard(buffer,parse); num_words = WordCount(); players_command = 100 + num_words; } if (EndActivity(READING_A_COMMAND_ACT)) jump ReType; .ReParse; parser_inflection = name; ! Initially assume the command is aimed at the player, and the verb ! is the first word num_words = WordCount(); players_command = 100 + num_words; wn = 1; inferred_go = false; #Ifdef LanguageToInformese; LanguageToInformese(); ! Re-tokenise: VM_Tokenise(buffer,parse); #Endif; ! LanguageToInformese num_words = WordCount(); players_command = 100 + num_words; k=0; #Ifdef DEBUG; if (parser_trace >= 2) { print "[ "; for (i=0 : i(i*2 + 1); #Ifnot; ! TARGET_GLULX j = parse-->(i*3 + 1); #Endif; ! TARGET_ k = WordAddress(i+1); l = WordLength(i+1); print "~"; for (m=0 : mm; print "~ "; if (j == 0) print "?"; else { #Ifdef TARGET_ZCODE; if (UnsignedCompare(j, HDR_DICTIONARY-->0) >= 0 && UnsignedCompare(j, HDR_HIGHMEMORY-->0) < 0) print (address) j; else print j; #Ifnot; ! TARGET_GLULX if (j->0 == $60) print (address) j; else print j; #Endif; ! TARGET_ } if (i ~= num_words-1) print " / "; } print " ]^"; } #Endif; ! DEBUG verb_wordnum = 1; actor = player; actors_location = ScopeCeiling(player); usual_grammar_after = 0; .AlmostReParse; scope_token = 0; action_to_be = NULL; ! Begin from what we currently think is the verb word .BeginCommand; wn = verb_wordnum; verb_word = NextWordStopped(); ! If there's no input here, we must have something like "person,". if (verb_word == -1) { best_etype = STUCK_PE; jump GiveError; } if (verb_word == comma_word) { best_etype = COMMABEGIN_PE; jump GiveError; } ! Now try for "again" or "g", which are special cases: don't allow "again" if nothing ! has previously been typed; simply copy the previous text across if (verb_word == AGAIN2__WD or AGAIN3__WD) verb_word = AGAIN1__WD; if (verb_word == AGAIN1__WD) { if (actor ~= player) { best_etype = ANIMAAGAIN_PE; jump GiveError; } #Ifdef TARGET_ZCODE; if (buffer3->1 == 0) { PARSER_COMMAND_INTERNAL_RM('D'); new_line; jump ReType; } #Ifnot; ! TARGET_GLULX if (buffer3-->0 == 0) { PARSER_COMMAND_INTERNAL_RM('D'); new_line; jump ReType; } #Endif; ! TARGET_ for (i=0 : ii = buffer3->i; VM_Tokenise(buffer,parse); num_words = WordCount(); players_command = 100 + num_words; jump ReParse; } ! Save the present input in case of an "again" next time if (verb_word ~= AGAIN1__WD) for (i=0 : ii = buffer->i; if (usual_grammar_after == 0) { j = verb_wordnum; i = RunRoutines(actor, grammar); #Ifdef DEBUG; if (parser_trace >= 2 && actor.grammar ~= 0 or NULL) print " [Grammar property returned ", i, "]^"; #Endif; ! DEBUG if ((i ~= 0 or 1) && (VM_InvalidDictionaryAddress(i))) { usual_grammar_after = verb_wordnum; i=-i; } if (i == 1) { parser_results-->ACTION_PRES = action; parser_results-->NO_INPS_PRES = 0; parser_results-->INP1_PRES = noun; parser_results-->INP2_PRES = second; if (noun) parser_results-->NO_INPS_PRES = 1; if (second) parser_results-->NO_INPS_PRES = 2; rtrue; } if (i ~= 0) { verb_word = i; wn--; verb_wordnum--; } else { wn = verb_wordnum; verb_word = NextWord(); } } else usual_grammar_after = 0; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter B ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef LanguageIsVerb; if (verb_word == 0) { i = wn; verb_word = LanguageIsVerb(buffer, parse, verb_wordnum); wn = i; } #Endif; ! LanguageIsVerb ! If the first word is not listed as a verb, it must be a direction ! or the name of someone to talk to if (verb_word == 0 || ((verb_word->#dict_par1) & 1) == 0) { ! So is the first word an object contained in the special object "compass" ! (i.e., a direction)? This needs use of NounDomain, a routine which ! does the object matching, returning the object number, or 0 if none found, ! or REPARSE_CODE if it has restructured the parse table so the whole parse ! must be begun again... wn = verb_wordnum; indef_mode = false; token_filter = 0; parameters = 0; @push actor; @push action; @push action_to_be; actor = player; meta = false; action = ##Go; action_to_be = ##Go; l = NounDomain(compass, 0, 0); @pull action_to_be; @pull action; @pull actor; if (l == REPARSE_CODE) jump ReParse; ! If it is a direction, send back the results: ! action=GoSub, no of arguments=1, argument 1=the direction. if ((l~=0) && (l ofclass K3_direction)) { parser_results-->ACTION_PRES = ##Go; parser_results-->NO_INPS_PRES = 1; parser_results-->INP1_PRES = l; inferred_go = true; jump LookForMore; } } ! end of first-word-not-a-verb ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter C ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Only check for a comma (a "someone, do something" command) if we are ! not already in the middle of one. (This simplification stops us from ! worrying about "robot, wizard, you are an idiot", telling the robot to ! tell the wizard that she is an idiot.) if (actor == player) { for (j=2 : j<=num_words : j++) { i=NextWord(); if (i == comma_word) jump Conversation; } } jump NotConversation; ! NextWord nudges the word number wn on by one each time, so we've now ! advanced past a comma. (A comma is a word all on its own in the table.) .Conversation; j = wn - 1; ! Use NounDomain (in the context of "animate creature") to see if the ! words make sense as the name of someone held or nearby wn = 1; lookahead = HELD_TOKEN; scope_reason = TALKING_REASON; l = NounDomain(player,actors_location,6); scope_reason = PARSING_REASON; if (l == REPARSE_CODE) jump ReParse; if (l == 0) { if (verb_word && ((verb_word->#dict_par1) & 1)) jump NotConversation; best_etype = MISSINGPERSON_PE; jump GiveError; } .Conversation2; ! The object addressed must at least be "talkable" if not actually "animate" ! (the distinction allows, for instance, a microphone to be spoken to, ! without the parser thinking that the microphone is human). if (l hasnt animate && l hasnt talkable) { best_etype = ANIMALISTEN_PE; noun = l; jump GiveError; } ! Check that there aren't any mystery words between the end of the person's ! name and the comma (eg, throw out "dwarf sdfgsdgs, go north"). if (wn ~= j) { if (verb_word && ((verb_word->#dict_par1) & 1)) jump NotConversation; best_etype = TOTALK_PE; jump GiveError; } ! The player has now successfully named someone. Adjust "him", "her", "it": PronounNotice(l); ! Set the global variable "actor", adjust the number of the first word, ! and begin parsing again from there. verb_wordnum = j + 1; ! Stop things like "me, again": if (l == player) { wn = verb_wordnum; if (NextWordStopped() == AGAIN1__WD or AGAIN2__WD or AGAIN3__WD) { best_etype = ANIMAAGAIN_PE; jump GiveError; } } actor = l; actors_location = ScopeCeiling(l); #Ifdef DEBUG; if (parser_trace >= 1) print "[Actor is ", (the) actor, " in ", (name) actors_location, "]^"; #Endif; ! DEBUG jump BeginCommand; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter D ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== .NotConversation; if (verb_word == 0 || ((verb_word->#dict_par1) & 1) == 0) { verb_word = UnknownVerb(verb_word); if (verb_word ~= 0) jump VerbAccepted; best_etype = VERB_PE; jump GiveError; } .VerbAccepted; ! We now definitely have a verb, not a direction, whether we got here by the ! "take ..." or "person, take ..." method. Get the meta flag for this verb: meta = ((verb_word->#dict_par1) & 2)/2; ! You can't order other people to "full score" for you, and so on... if (meta == 1 && actor ~= player) { best_etype = VERB_PE; meta = 0; jump GiveError; } ! Now let i be the corresponding verb number... i = DictionaryWordToVerbNum(verb_word); ! ...then look up the i-th entry in the verb table, whose address is at word ! 7 in the Z-machine (in the header), so as to get the address of the syntax ! table for the given verb... #Ifdef TARGET_ZCODE; syntax = (HDR_STATICMEMORY-->0)-->i; #Ifnot; ! TARGET_GLULX syntax = (#grammar_table)-->(i+1); #Endif; ! TARGET_ ! ...and then see how many lines (ie, different patterns corresponding to the ! same verb) are stored in the parse table... num_lines = (syntax->0) - 1; ! ...and now go through them all, one by one. ! To prevent pronoun_word 0 being misunderstood, pronoun_word = NULL; pronoun_obj = NULL; #Ifdef DEBUG; if (parser_trace >= 1) print "[Parsing for the verb '", (address) verb_word, "' (", num_lines+1, " lines)]^"; #Endif; ! DEBUG best_etype = STUCK_PE; nextbest_etype = STUCK_PE; multiflag = false; ! "best_etype" is the current failure-to-match error - it is by default ! the least informative one, "don't understand that sentence". ! "nextbest_etype" remembers the best alternative to having to ask a ! scope token for an error message (i.e., the best not counting ASKSCOPE_PE). ! multiflag is used here to prevent inappropriate MULTI_PE errors ! in addition to its unrelated duties passing information to action routines ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter E ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== line_address = syntax + 1; for (line=0 : line<=num_lines : line++) { ! Unpack the syntax line from Inform format into three arrays; ensure that ! the sequence of tokens ends in an ENDIT_TOKEN. line_address = UnpackGrammarLine(line_address); #Ifdef DEBUG; if (parser_trace >= 1) { if (parser_trace >= 2) new_line; print "[line ", line; DebugGrammarLine(); print "]^"; } #Endif; ! DEBUG ! We aren't in "not holding" or inferring modes, and haven't entered ! any parameters on the line yet, or any special numbers; the multiple ! object is still empty. inferfrom = 0; parameters = 0; nsns = 0; special_word = 0; multiple_object-->0 = 0; multi_context = 0; etype = STUCK_PE; ! Put the word marker back to just after the verb wn = verb_wordnum+1; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter F ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== advance_warning = -1; indef_mode = false; for (i=0,m=false,pcount=0 : line_token-->pcount ~= ENDIT_TOKEN : pcount++) { scope_token = 0; if (line_ttype-->pcount ~= PREPOSITION_TT) i++; if (line_ttype-->pcount == ELEMENTARY_TT) { if (line_tdata-->pcount == MULTI_TOKEN) m = true; if (line_tdata-->pcount == MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN && i == 1) { ! First non-preposition is "multiexcept" or ! "multiinside", so look ahead. #Ifdef DEBUG; if (parser_trace >= 2) print " [Trying look-ahead]^"; #Endif; ! DEBUG ! We need this to be followed by 1 or more prepositions. pcount++; if (line_ttype-->pcount == PREPOSITION_TT) { ! skip ahead to a preposition word in the input do { l = NextWord(); } until ((wn > num_words) || (l && (l->#dict_par1) & 8 ~= 0)); if (wn > num_words) { #Ifdef DEBUG; if (parser_trace >= 2) print " [Look-ahead aborted: prepositions missing]^"; #Endif; jump EmptyLine; } do { if (PrepositionChain(l, pcount) ~= -1) { ! advance past the chain if ((line_token-->pcount)->0 & $20 ~= 0) { pcount++; while ((line_token-->pcount ~= ENDIT_TOKEN) && ((line_token-->pcount)->0 & $10 ~= 0)) pcount++; } else { pcount++; } } else { ! try to find another preposition word do { l = NextWord(); } until ((wn >= num_words) || (l && (l->#dict_par1) & 8 ~= 0)); if (l && (l->#dict_par1) & 8) continue; ! lookahead failed #Ifdef DEBUG; if (parser_trace >= 2) print " [Look-ahead aborted: prepositions don't match]^"; #endif; jump LineFailed; } if (wn <= num_words) l = NextWord(); } until (line_ttype-->pcount ~= PREPOSITION_TT); .EmptyLine; ! put back the non-preposition we just read wn--; if ((line_ttype-->pcount == ELEMENTARY_TT) && (line_tdata-->pcount == NOUN_TOKEN)) { l = Descriptors(); ! skip past THE etc if (l~=0) etype=l; ! don't allow multiple objects k = parser_results-->INP1_PRES; @push k; @push parameters; parameters = 1; parser_results-->INP1_PRES = 0; l = NounDomain(actors_location, actor, NOUN_TOKEN, true); @pull parameters; @pull k; parser_results-->INP1_PRES = k; #Ifdef DEBUG; if (parser_trace >= 2) { print " [Advanced to ~noun~ token: "; if (l == REPARSE_CODE) print "re-parse request]^"; else { if (l == 1) print "but multiple found]^"; if (l == 0) print "error ", etype, "]^"; if (l >= 2) print (the) l, "]^"; } } #Endif; ! DEBUG if (l == REPARSE_CODE) jump ReParse; if (l >= 2) advance_warning = l; } } break; } } } ! Slightly different line-parsing rules will apply to "take multi", to ! prevent "take all" behaving correctly but misleadingly when there's ! nothing to take. take_all_rule = 0; if (m && params_wanted == 1 && action_to_be == ##Take) take_all_rule = 1; ! And now start again, properly, forearmed or not as the case may be. ! As a precaution, we clear all the variables again (they may have been ! disturbed by the call to NounDomain, which may have called outside ! code, which may have done anything!). inferfrom = 0; parameters = 0; nsns = 0; special_word = 0; multiple_object-->0 = 0; etype = STUCK_PE; wn = verb_wordnum+1; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter G ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== m = true; for (pcount=1 : : pcount++) if (line_token-->(pcount-1) == ENDIT_TOKEN) { if (pcount >= 2) { while ((((line_token-->(pcount-2))->0) & $10) ~= 0) pcount--; AnalyseToken(line_token-->(pcount-2)); if (found_ttype == PREPOSITION_TT) { l = -1; while (true) { m = NextWordStopped(); if (m == -1) break; l = m; } if (PrepositionChain(l, pcount-2) == -1) { m = false; #Ifdef DEBUG; if (parser_trace >= 2) print "[line rejected for not ending with correct preposition]^"; #Endif; ! DEBUG } else m = true; } } break; } wn = verb_wordnum+1; if (m) for (pcount=1 : : pcount++) { pattern-->pcount = PATTERN_NULL; scope_token = 0; token = line_token-->(pcount-1); lookahead = line_token-->pcount; #Ifdef DEBUG; if (parser_trace >= 2) print " [line ", line, " token ", pcount, " word ", wn, " : ", (DebugToken) token, "]^"; #Endif; ! DEBUG if (token ~= ENDIT_TOKEN) { scope_reason = PARSING_REASON; AnalyseToken(token); l = ParseToken(found_ttype, found_tdata, pcount-1, token); while ((l >= GPR_NOUN) && (l < -1)) l = ParseToken(ELEMENTARY_TT, l + 256); scope_reason = PARSING_REASON; if (l == GPR_PREPOSITION) { if (found_ttype~=PREPOSITION_TT && (found_ttype~=ELEMENTARY_TT || found_tdata~=TOPIC_TOKEN)) params_wanted--; l = true; } else if (l < 0) l = false; else if (l ~= GPR_REPARSE) { if (l == GPR_NUMBER) { if (nsns == 0) special_number1 = parsed_number; else special_number2 = parsed_number; nsns++; l = 1; } if (l == GPR_MULTIPLE) l = 0; parser_results-->(parameters+INP1_PRES) = l; parameters++; pattern-->pcount = l; l = true; } #Ifdef DEBUG; if (parser_trace >= 3) { print " [token resulted in "; if (l == REPARSE_CODE) print "re-parse request]^"; if (l == 0) print "failure with error type ", etype, "]^"; if (l == 1) print "success]^"; } #Endif; ! DEBUG if (l == REPARSE_CODE) jump ReParse; if (l == false) break; } else { ! If the player has entered enough already but there's still ! text to wade through: store the pattern away so as to be able to produce ! a decent error message if this turns out to be the best we ever manage, ! and in the mean time give up on this line ! However, if the superfluous text begins with a comma or "then" then ! take that to be the start of another instruction if (wn <= num_words) { l = NextWord(); if (l == THEN1__WD or THEN2__WD or THEN3__WD or comma_word) { held_back_mode = true; hb_wn = wn-1; } else { for (m=0 : m<32 : m++) pattern2-->m = pattern-->m; pcount2 = pcount; etype = UPTO_PE; break; } } ! Now, we may need to revise the multiple object because of the single one ! we now know (but didn't when the list was drawn up). if (parameters >= 1) { if (parser_results-->INP1_PRES == 0) { l = ReviseMulti(parser_results-->INP2_PRES); if (l ~= 0) { etype = l; parser_results-->ACTION_PRES = action_to_be; break; } } } if (parameters >= 2) { if (parser_results-->INP2_PRES == 0) { l = ReviseMulti(parser_results-->INP1_PRES); if (l ~= 0) { etype = l; break; } } else { k = parser_results-->INP1_PRES; l = parser_results-->INP2_PRES; if (k && l) { if ((multi_context==MULTIEXCEPT_TOKEN && k == l) || ((multi_context==MULTIINSIDE_TOKEN && k notin l && l notin k))) { best_etype = NOTHING_PE; parser_results-->ACTION_PRES = action_to_be; jump GiveError; } } } } ! To trap the case of "take all" inferring only "yourself" when absolutely ! nothing else is in the vicinity... if (take_all_rule == 2 && parser_results-->INP1_PRES == actor) { best_etype = NOTHING_PE; jump GiveError; } #Ifdef DEBUG; if (parser_trace >= 1) print "[Line successfully parsed]^"; #Endif; ! DEBUG ! The line has successfully matched the text. Declare the input error-free... oops_from = 0; ! ...explain any inferences made (using the pattern)... if (inferfrom ~= 0) { PrintInferredCommand(inferfrom); ClearParagraphing(20); } ! ...copy the action number, and the number of parameters... parser_results-->ACTION_PRES = action_to_be; parser_results-->NO_INPS_PRES = parameters; ! ...reverse first and second parameters if need be... if (action_reversed && parameters == 2) { i = parser_results-->INP1_PRES; parser_results-->INP1_PRES = parser_results-->INP2_PRES; parser_results-->INP2_PRES = i; if (nsns == 2) { i = special_number1; special_number1 = special_number2; special_number2 = i; } } ! ...and to reset "it"-style objects to the first of these parameters, if ! there is one (and it really is an object)... if (parameters > 0 && parser_results-->INP1_PRES >= 2) PronounNotice(parser_results-->INP1_PRES); ! ...and return from the parser altogether, having successfully matched ! a line. if (held_back_mode) { wn=hb_wn; jump LookForMore; } rtrue; } ! end of if(token ~= ENDIT_TOKEN) else } ! end of for(pcount++) .LineFailed; ! The line has failed to match. ! We continue the outer "for" loop, trying the next line in the grammar. if (etype > best_etype) best_etype = etype; if (etype ~= ASKSCOPE_PE && etype > nextbest_etype) nextbest_etype = etype; ! ...unless the line was something like "take all" which failed because ! nothing matched the "all", in which case we stop and give an error now. if (take_all_rule == 2 && etype==NOTHING_PE) break; } ! end of for(line++) ! The grammar is exhausted: every line has failed to match. ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter H ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== .GiveError; etype = best_etype; if (actor ~= player) { if (usual_grammar_after ~= 0) { verb_wordnum = usual_grammar_after; jump AlmostReParse; } wn = verb_wordnum; special_word = NextWord(); if (special_word == comma_word) { special_word = NextWord(); verb_wordnum++; } parser_results-->ACTION_PRES = ##Answer; parser_results-->NO_INPS_PRES = 2; parser_results-->INP1_PRES = actor; parser_results-->INP2_PRES = 1; special_number1 = special_word; actor = player; consult_from = verb_wordnum; consult_words = num_words-consult_from+1; rtrue; } ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter I ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! If the player was the actor (eg, in "take dfghh") the error must be printed, ! and fresh input called for. In three cases the oops word must be jiggled. if ((etype ofclass Routine) || (etype ofclass String)) { if (ParserError(etype) ~= 0) jump ReType; } else { if (verb_wordnum == 0 && etype == CANTSEE_PE) etype = VERB_PE; players_command = 100 + WordCount(); ! The snippet variable "player's command" BeginActivity(PRINTING_A_PARSER_ERROR_ACT); if (ForActivity(PRINTING_A_PARSER_ERROR_ACT)) jump SkipParserError; } pronoun_word = pronoun__word; pronoun_obj = pronoun__obj; if (etype == STUCK_PE) { PARSER_ERROR_INTERNAL_RM('A'); new_line; oops_from = 1; } if (etype == UPTO_PE) { if (inferred_go) PARSER_ERROR_INTERNAL_RM('C'); else PARSER_ERROR_INTERNAL_RM('B'); for (m=0 : m<32 : m++) pattern-->m = pattern2-->m; pcount = pcount2; PrintCommand(0); print ".^"; } if (etype == NUMBER_PE) { PARSER_ERROR_INTERNAL_RM('D'); new_line; } if (etype == CANTSEE_PE) { PARSER_ERROR_INTERNAL_RM('E'); new_line; oops_from=saved_oops; } if (etype == TOOLIT_PE) { PARSER_ERROR_INTERNAL_RM('F'); new_line; } if (etype == NOTHELD_PE) { PARSER_ERROR_INTERNAL_RM('G'); new_line; oops_from=saved_oops; } if (etype == MULTI_PE) { PARSER_ERROR_INTERNAL_RM('H'); new_line; } if (etype == MMULTI_PE) { PARSER_ERROR_INTERNAL_RM('I'); new_line; } if (etype == VAGUE_PE) { PARSER_ERROR_INTERNAL_RM('J'); new_line; } if (etype == ITGONE_PE) { if (pronoun_obj == NULL) { PARSER_ERROR_INTERNAL_RM('J'); new_line; } else { PARSER_ERROR_INTERNAL_RM('K', noun); new_line; } } if (etype == EXCEPT_PE) { PARSER_ERROR_INTERNAL_RM('L'); new_line; } if (etype == ANIMA_PE) { PARSER_ERROR_INTERNAL_RM('M'); new_line; } if (etype == VERB_PE) { PARSER_ERROR_INTERNAL_RM('N'); new_line; } if (etype == SCENERY_PE) { PARSER_ERROR_INTERNAL_RM('O'); new_line; } if (etype == JUNKAFTER_PE) { PARSER_ERROR_INTERNAL_RM('P'); new_line; } if (etype == TOOFEW_PE) { PARSER_ERROR_INTERNAL_RM('Q', multi_had); new_line; } if (etype == NOTHING_PE) { if (parser_results-->ACTION_PRES == ##Remove && parser_results-->INP2_PRES ofclass Object) { noun = parser_results-->INP2_PRES; ! ensure valid for messages if (noun has animate) { PARSER_N_ERROR_INTERNAL_RM('C', noun); new_line; } else if (noun hasnt container or supporter) { PARSER_N_ERROR_INTERNAL_RM('D', noun); new_line; } else if (noun has container && noun hasnt open) { PARSER_N_ERROR_INTERNAL_RM('E', noun); new_line; } else if (children(noun)==0) { PARSER_N_ERROR_INTERNAL_RM('F', noun); new_line; } else parser_results-->ACTION_PRES = 0; } if (parser_results-->ACTION_PRES ~= ##Remove) { if (multi_wanted==100) { PARSER_N_ERROR_INTERNAL_RM('A'); new_line; } else { PARSER_N_ERROR_INTERNAL_RM('B'); new_line; } } } if (etype == NOTINCONTEXT_PE) { PARSER_ERROR_INTERNAL_RM('R'); new_line; } if (etype == ANIMAAGAIN_PE) { PARSER_ERROR_INTERNAL_RM('S'); new_line; } if (etype == COMMABEGIN_PE) { PARSER_ERROR_INTERNAL_RM('T'); new_line; } if (etype == MISSINGPERSON_PE) { PARSER_ERROR_INTERNAL_RM('U'); new_line; } if (etype == ANIMALISTEN_PE) { PARSER_ERROR_INTERNAL_RM('V', noun); new_line; } if (etype == TOTALK_PE) { PARSER_ERROR_INTERNAL_RM('W'); new_line; } if (etype == ASKSCOPE_PE) { scope_stage = 3; if (indirect(scope_error) == -1) { best_etype = nextbest_etype; if (~~((etype ofclass Routine) || (etype ofclass String))) EndActivity(PRINTING_A_PARSER_ERROR_ACT); jump GiveError; } } .SkipParserError; if ((etype ofclass Routine) || (etype ofclass String)) jump ReType; say__p = 1; EndActivity(PRINTING_A_PARSER_ERROR_ACT); ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter J ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! And go (almost) right back to square one... jump ReType; ! ...being careful not to go all the way back, to avoid infinite repetition ! of a deferred command causing an error. ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parser Letter K ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! At this point, the return value is all prepared, and we are only looking ! to see if there is a "then" followed by subsequent instruction(s). .LookForMore; if (wn > num_words) rtrue; i = NextWord(); if (i == THEN1__WD or THEN2__WD or THEN3__WD or comma_word) { if (wn > num_words) { held_back_mode = false; return; } hb_wn = wn; held_back_mode = true; return; } best_etype = UPTO_PE; jump GiveError; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: End of Parser Proper ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ]; ! end of Parser__parse ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Internal Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PARSER_ERROR_INTERNAL_R; ]; [ PARSER_N_ERROR_INTERNAL_R; ]; [ PARSER_COMMAND_INTERNAL_R; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parse Token ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ParseTokenStopped x y; if (wn>WordCount()) return GPR_FAIL; return ParseToken(x,y); ]; Global parsetoken_nesting = 0; [ ParseToken given_ttype given_tdata token_n token i t rv; if (parsetoken_nesting > 0) { ! save match globals @push match_from; @push token_filter; @push match_length; @push number_of_classes; @push oops_from; for (i=0: ii; @push t; t = match_classes-->i; @push t; t = match_scores-->i; @push t; } @push number_matched; } parsetoken_nesting++; rv = ParseToken__(given_ttype, given_tdata, token_n, token); parsetoken_nesting--; if (parsetoken_nesting > 0) { ! restore match globals @pull number_matched; for (i=number_matched-1: i>=0: i--) { @pull t; match_scores-->i = t; @pull t; match_classes-->i = t; @pull t; match_list-->i = t; } @pull oops_from; @pull number_of_classes; @pull match_length; @pull token_filter; @pull match_from; } return rv; ]; [ ParseToken__ given_ttype given_tdata token_n token l o i j k and_parity single_object desc_wn many_flag token_allows_multiple prev_indef_wanted; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parse Token Letter A ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== token_filter = 0; parser_inflection = name; switch (given_ttype) { ELEMENTARY_TT: switch (given_tdata) { SPECIAL_TOKEN: l = TryNumber(wn); special_word = NextWord(); #Ifdef DEBUG; if (l ~= -1000) if (parser_trace >= 3) print " [Read special as the number ", l, "]^"; #Endif; ! DEBUG if (l == -1000) { #Ifdef DEBUG; if (parser_trace >= 3) print " [Read special word at word number ", wn, "]^"; #Endif; ! DEBUG l = special_word; } parsed_number = l; return GPR_NUMBER; NUMBER_TOKEN: l=TryNumber(wn++); if (l == -1000) { etype = NUMBER_PE; return GPR_FAIL; } #Ifdef DEBUG; if (parser_trace>=3) print " [Read number as ", l, "]^"; #Endif; ! DEBUG parsed_number = l; return GPR_NUMBER; CREATURE_TOKEN: if (action_to_be == ##Answer or ##Ask or ##AskFor or ##Tell) scope_reason = TALKING_REASON; TOPIC_TOKEN: consult_from = wn; if ((line_ttype-->(token_n+1) ~= PREPOSITION_TT) && (line_token-->(token_n+1) ~= ENDIT_TOKEN)) { RunTimeProblem(RTP_TEXTTOKENTOOHARD); return GPR_PREPOSITION; } do o = NextWordStopped(); until (o == -1 || PrepositionChain(o, token_n+1) ~= -1); wn--; consult_words = wn-consult_from; if (consult_words == 0) return GPR_FAIL; if (action_to_be == ##Ask or ##Answer or ##Tell) { o = wn; wn = consult_from; parsed_number = NextWord(); wn = o; return 1; } if (o==-1 && (line_ttype-->(token_n+1) == PREPOSITION_TT)) return GPR_FAIL; ! don't infer if required preposition is absent return GPR_PREPOSITION; } PREPOSITION_TT: ! Is it an unnecessary alternative preposition, when a previous choice ! has already been matched? if ((token->0) & $10) return GPR_PREPOSITION; ! If we've run out of the player's input, but still have parameters to ! specify, we go into "infer" mode, remembering where we are and the ! preposition we are inferring... if (wn > num_words) { if (inferfrom==0 && parameterspcount = REPARSE_CODE + VM_DictionaryAddressToNumber(given_tdata); } ! If we are not inferring, then the line is wrong... if (inferfrom == 0) return -1; ! If not, then the line is right but we mark in the preposition... pattern-->pcount = REPARSE_CODE + VM_DictionaryAddressToNumber(given_tdata); return GPR_PREPOSITION; } o = NextWord(); pattern-->pcount = REPARSE_CODE + VM_DictionaryAddressToNumber(o); ! Whereas, if the player has typed something here, see if it is the ! required preposition... if it's wrong, the line must be wrong, ! but if it's right, the token is passed (jump to finish this token). if (o == given_tdata) return GPR_PREPOSITION; if (PrepositionChain(o, token_n) ~= -1) return GPR_PREPOSITION; return -1; GPR_TT: l = indirect(given_tdata); #Ifdef DEBUG; if (parser_trace >= 3) print " [Outside parsing routine returned ", l, "]^"; #Endif; ! DEBUG return l; SCOPE_TT: scope_token = given_tdata; scope_stage = 1; #Ifdef DEBUG; if (parser_trace >= 3) print " [Scope routine called at stage 1]^"; #Endif; ! DEBUG l = indirect(scope_token); #Ifdef DEBUG; if (parser_trace >= 3) print " [Scope routine returned multiple-flag of ", l, "]^"; #Endif; ! DEBUG if (l == 1) given_tdata = MULTI_TOKEN; else given_tdata = NOUN_TOKEN; ATTR_FILTER_TT: token_filter = 1 + given_tdata; given_tdata = NOUN_TOKEN; ROUTINE_FILTER_TT: token_filter = given_tdata; given_tdata = NOUN_TOKEN; } ! end of switch(given_ttype) token = given_tdata; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parse Token Letter B ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! There are now three possible ways we can be here: ! parsing an elementary token other than "special" or "number"; ! parsing a scope token; ! parsing a noun-filter token (either by routine or attribute). ! ! In each case, token holds the type of elementary parse to ! perform in matching one or more objects, and ! token_filter is 0 (default), an attribute + 1 for an attribute filter ! or a routine address for a routine filter. token_allows_multiple = false; if (token == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) token_allows_multiple = true; many_flag = false; and_parity = true; dont_infer = false; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parse Token Letter C ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! We expect to find a list of objects next in what the player's typed. .ObjectList; #Ifdef DEBUG; if (parser_trace >= 3) print " [Object list from word ", wn, "]^"; #Endif; ! DEBUG ! Take an advance look at the next word: if it's "it" or "them", and these ! are unset, set the appropriate error number and give up on the line ! (if not, these are still parsed in the usual way - it is not assumed ! that they still refer to something in scope) o = NextWord(); wn--; pronoun_word = NULL; pronoun_obj = NULL; l = PronounValue(o); if (l ~= 0) { pronoun_word = o; pronoun_obj = l; if (l == NULL) { ! Don't assume this is a use of an unset pronoun until the ! descriptors have been checked, because it might be an ! article (or some such) instead for (l=1 : l<=LanguageDescriptors-->0 : l=l+4) if (o == LanguageDescriptors-->l) jump AssumeDescriptor; pronoun__word = pronoun_word; pronoun__obj = pronoun_obj; etype = VAGUE_PE; if (parser_trace >= 3) print " [Stop: unset pronoun]^"; return GPR_FAIL; } } .AssumeDescriptor; if (o == ME1__WD or ME2__WD or ME3__WD) { pronoun_word = o; pronoun_obj = player; } allow_plurals = true; desc_wn = wn; .TryAgain; ! First, we parse any descriptive words (like "the", "five" or "every"): l = Descriptors(token_allows_multiple); if (l ~= 0) { etype = l; return 0; } .TryAgain2; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parse Token Letter D ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! This is an actual specified object, and is therefore where a typing error ! is most likely to occur, so we set: oops_from = wn; ! So, two cases. Case 1: token not equal to "held" (so, no implicit takes) ! but we may well be dealing with multiple objects ! In either case below we use NounDomain, giving it the token number as ! context, and two places to look: among the actor's possessions, and in the ! present location. (Note that the order depends on which is likeliest.) if (token ~= HELD_TOKEN) { i = multiple_object-->0; #Ifdef DEBUG; if (parser_trace >= 3) print " [Calling NounDomain on location and actor]^"; #Endif; ! DEBUG l = NounDomain(actors_location, actor, token); if (l == REPARSE_CODE) return l; ! Reparse after Q&A if (indef_wanted == INDEF_ALL_WANTED && l == 0 && number_matched == 0) l = 1; ! ReviseMulti if TAKE ALL FROM empty container if (token_allows_multiple && ~~multiflag) { if (best_etype==MULTI_PE) best_etype=STUCK_PE; multiflag = true; } if (l == 0) { if (indef_possambig) { ResetDescriptors(); wn = desc_wn; jump TryAgain2; } if (etype == MULTI_PE && multiflag) etype = STUCK_PE; etype=CantSee(); jump FailToken; } ! Choose best error #Ifdef DEBUG; if (parser_trace >= 3) { if (l > 1) print " [ND returned ", (the) l, "]^"; else { print " [ND appended to the multiple object list:^"; k = multiple_object-->0; for (j=i+1 : j<=k : j++) print " Entry ", j, ": ", (The) multiple_object-->j, " (", multiple_object-->j, ")^"; print " List now has size ", k, "]^"; } } #Endif; ! DEBUG if (l == 1) { if (~~many_flag) many_flag = true; else { ! Merge with earlier ones k = multiple_object-->0; ! (with either parity) multiple_object-->0 = i; for (j=i+1 : j<=k : j++) { if (and_parity) MultiAdd(multiple_object-->j); else MultiSub(multiple_object-->j); } #Ifdef DEBUG; if (parser_trace >= 3) print " [Merging ", k-i, " new objects to the ", i, " old ones]^"; #Endif; ! DEBUG } } else { ! A single object was indeed found if (match_length == 0 && indef_possambig) { ! So the answer had to be inferred from no textual data, ! and we know that there was an ambiguity in the descriptor ! stage (such as a word which could be a pronoun being ! parsed as an article or possessive). It's worth having ! another go. ResetDescriptors(); wn = desc_wn; jump TryAgain2; } if ((token == CREATURE_TOKEN) && (CreatureTest(l) == 0)) { etype = ANIMA_PE; jump FailToken; } ! Animation is required if (~~many_flag) single_object = l; else { if (and_parity) MultiAdd(l); else MultiSub(l); #Ifdef DEBUG; if (parser_trace >= 3) print " [Combining ", (the) l, " with list]^"; #Endif; ! DEBUG } } } else { ! Case 2: token is "held" (which fortunately can't take multiple objects) ! and may generate an implicit take l = NounDomain(actor,actors_location,token); ! Same as above... if (l == REPARSE_CODE) return l; if (l == 0) { if (indef_possambig) { ResetDescriptors(); wn = desc_wn; jump TryAgain2; } etype = CantSee(); jump FailToken; ! Choose best error } ! ...until it produces something not held by the actor. Then an implicit ! take must be tried. If this is already happening anyway, things are too ! confused and we have to give up (but saving the oops marker so as to get ! it on the right word afterwards). ! The point of this last rule is that a sequence like ! ! > read newspaper ! (taking the newspaper first) ! The dwarf unexpectedly prevents you from taking the newspaper! ! ! should not be allowed to go into an infinite repeat - read becomes ! take then read, but take has no effect, so read becomes take then read... ! Anyway for now all we do is record the number of the object to take. o = parent(l); if (o ~= actor) { #Ifdef DEBUG; if (parser_trace >= 3) print " [Allowing object ", (the) l, " for now]^"; #Endif; ! DEBUG } single_object = l; } ! end of if (token ~= HELD_TOKEN) else ! The following moves the word marker to just past the named object... ! if (match_from ~= oops_from) print match_from, " vs ", oops_from, "^"; ! wn = oops_from + match_length; wn = match_from + match_length; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parse Token Letter E ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Object(s) specified now: is that the end of the list, or have we reached ! "and", "but" and so on? If so, create a multiple-object list if we ! haven't already (and are allowed to). .NextInList; o = NextWord(); if (o == AND1__WD or AND2__WD or AND3__WD or BUT1__WD or BUT2__WD or BUT3__WD or comma_word) { #Ifdef DEBUG; if (parser_trace >= 3) print " [Read connective '", (address) o, "']^"; #Endif; ! DEBUG if (~~token_allows_multiple) { if (multiflag) jump PassToken; ! give UPTO_PE error etype=MULTI_PE; jump FailToken; } if (o == BUT1__WD or BUT2__WD or BUT3__WD) and_parity = 1-and_parity; if (~~many_flag) { multiple_object-->0 = 1; multiple_object-->1 = single_object; many_flag = true; #Ifdef DEBUG; if (parser_trace >= 3) print " [Making new list from ", (the) single_object, "]^"; #Endif; ! DEBUG } dont_infer = true; inferfrom=0; ! Don't print (inferences) jump ObjectList; ! And back around } wn--; ! Word marker back to first not-understood word ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parse Token Letter F ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Happy or unhappy endings: .PassToken; if (many_flag) { single_object = GPR_MULTIPLE; multi_context = token; } else { if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (token == MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) multi_context = token; if (indef_wanted < INDEF_ALL_WANTED && indef_wanted > 1) { multi_had = 1; multi_wanted = indef_wanted; etype = TOOFEW_PE; jump FailToken; } } } return single_object; .FailToken; ! If we were only guessing about it being a plural, try again but only ! allowing singulars (so that words like "six" are not swallowed up as ! Descriptors) if (allow_plurals && indef_guess_p == 1) { #Ifdef DEBUG; if (parser_trace >= 4) print " [Retrying singulars after failure ", etype, "]^"; #Endif; prev_indef_wanted = indef_wanted; allow_plurals = false; wn = desc_wn; jump TryAgain; } if ((indef_wanted > 0 || prev_indef_wanted > 0) && (~~multiflag)) etype = MULTI_PE; return GPR_FAIL; ]; ! end of ParseToken__ ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Descriptors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant OTHER_BIT = 1; ! These will be used in Adjudicate() Constant MY_BIT = 2; ! to disambiguate choices Constant THAT_BIT = 4; Constant PLURAL_BIT = 8; Constant LIT_BIT = 16; Constant UNLIT_BIT = 32; [ ResetDescriptors; indef_mode = 0; indef_type = 0; indef_wanted = 0; indef_guess_p = 0; indef_possambig = false; indef_owner = nothing; indef_cases = $$111111111111; indef_nspec_at = 0; ]; [ ArticleDescriptors o x flag cto type n; if (wn > num_words) return 0; for (flag=true : flag :) { o = NextWordStopped(); flag = false; for (x=1 : x<=LanguageDescriptors-->0 : x=x+4) if (o == LanguageDescriptors-->x) { type = LanguageDescriptors-->(x+2); if (type == DEFART_PK or INDEFART_PK) flag = true; } } wn--; return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parsing Descriptors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Descriptors o x flag cto type n; ResetDescriptors(); if (wn > num_words) return 0; for (flag=true : flag :) { o = NextWordStopped(); flag = false; for (x=1 : x<=LanguageDescriptors-->0 : x=x+4) if (o == LanguageDescriptors-->x) { flag = true; type = LanguageDescriptors-->(x+2); if (type ~= DEFART_PK) indef_mode = true; indef_possambig = true; indef_cases = indef_cases & (LanguageDescriptors-->(x+1)); if (type == POSSESS_PK) { cto = LanguageDescriptors-->(x+3); switch (cto) { 0: indef_type = indef_type | MY_BIT; 1: indef_type = indef_type | THAT_BIT; default: indef_owner = PronounValue(cto); if (indef_owner == NULL) indef_owner = InformParser; } } if (type == light) indef_type = indef_type | LIT_BIT; if (type == -light) indef_type = indef_type | UNLIT_BIT; } if (o == OTHER1__WD or OTHER2__WD or OTHER3__WD) { indef_mode = 1; flag = 1; indef_type = indef_type | OTHER_BIT; } if (o == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { indef_mode = 1; flag = 1; indef_wanted = INDEF_ALL_WANTED; if (take_all_rule == 1) take_all_rule = 2; indef_type = indef_type | PLURAL_BIT; } if (allow_plurals) { if (NextWordStopped() ~= -1 or THEN1__WD) { wn--; n = TryNumber(wn-1); } else { n=0; wn--; } if (n == 1) { indef_mode = 1; flag = 1; } if (n > 1) { indef_guess_p = 1; indef_mode = 1; flag = 1; indef_wanted = n; indef_nspec_at = wn-1; indef_type = indef_type | PLURAL_BIT; } } if (flag == 1 && NextWordStopped() ~= OF1__WD or OF2__WD or OF3__WD or OF4__WD) wn--; ! Skip 'of' after these } wn--; return 0; ]; [ SafeSkipDescriptors; @push indef_mode; @push indef_type; @push indef_wanted; @push indef_guess_p; @push indef_possambig; @push indef_owner; @push indef_cases; @push indef_nspec_at; Descriptors(); @pull indef_nspec_at; @pull indef_cases; @pull indef_owner; @pull indef_possambig; @pull indef_guess_p; @pull indef_wanted; @pull indef_type; @pull indef_mode; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Preposition Chain ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrepositionChain wd index; if (line_tdata-->index == wd) return wd; if ((line_token-->index)->0 & $20 == 0) return -1; do { if (line_tdata-->index == wd) return wd; index++; } until ((line_token-->index == ENDIT_TOKEN) || (((line_token-->index)->0 & $10) == 0)); return -1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Creature ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CreatureTest obj; if (obj has animate) rtrue; if (obj hasnt talkable) rfalse; if (action_to_be == ##Ask or ##Answer or ##Tell or ##AskFor) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Noun Domain ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NounDomain domain1 domain2 context dont_ask first_word i j k l answer_words marker; #Ifdef DEBUG; if (parser_trace >= 4) { print " [NounDomain called at word ", wn, "^"; print " "; if (indef_mode) { print "seeking indefinite object: "; if (indef_type & OTHER_BIT) print "other "; if (indef_type & MY_BIT) print "my "; if (indef_type & THAT_BIT) print "that "; if (indef_type & PLURAL_BIT) print "plural "; if (indef_type & LIT_BIT) print "lit "; if (indef_type & UNLIT_BIT) print "unlit "; if (indef_owner ~= 0) print "owner:", (name) indef_owner; new_line; print " number wanted: "; if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; new_line; print " most likely GNAs of names: ", indef_cases, "^"; } else print "seeking definite object^"; } #Endif; ! DEBUG match_length = 0; number_matched = 0; match_from = wn; SearchScope(domain1, domain2, context); #Ifdef DEBUG; if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; #Endif; ! DEBUG wn = match_from+match_length; ! If nothing worked at all, leave with the word marker skipped past the ! first unmatched word... if (number_matched == 0) { wn++; rfalse; } ! Suppose that there really were some words being parsed (i.e., we did ! not just infer). If so, and if there was only one match, it must be ! right and we return it... if (match_from <= num_words) { if (number_matched == 1) { i=match_list-->0; return i; } ! ...now suppose that there was more typing to come, i.e. suppose that ! the user entered something beyond this noun. If nothing ought to follow, ! then there must be a mistake, (unless what does follow is just a full ! stop, and or comma) if (wn <= num_words) { i = NextWord(); wn--; if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word or THEN1__WD or THEN2__WD or THEN3__WD or BUT1__WD or BUT2__WD or BUT3__WD) { if (lookahead == ENDIT_TOKEN) rfalse; } } } ! Now look for a good choice, if there's more than one choice... number_of_classes = 0; if (number_matched == 1) { i = match_list-->0; if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN or NOUN_TOKEN or HELD_TOKEN or CREATURE_TOKEN) { BeginActivity(DECIDING_WHETHER_ALL_INC_ACT, i); if ((ForActivity(DECIDING_WHETHER_ALL_INC_ACT, i)) && (RulebookFailed())) rfalse; EndActivity(DECIDING_WHETHER_ALL_INC_ACT, i); } } } if (number_matched > 1) { i = true; if (number_matched > 1) for (j=0 : jj, match_list-->(j+1)) == false) i = false; if (i) dont_infer = true; i = Adjudicate(context); if (i == -1) rfalse; if (i == 1) rtrue; ! Adjudicate has made a multiple ! object, and we pass it on } ! If i is non-zero here, one of two things is happening: either ! (a) an inference has been successfully made that object i is ! the intended one from the user's specification, or ! (b) the user finished typing some time ago, but we've decided ! on i because it's the only possible choice. ! In either case we have to keep the pattern up to date, ! note that an inference has been made and return. ! (Except, we don't note which of a pile of identical objects.) if (i ~= 0) { if (dont_infer) return i; if (inferfrom == 0) inferfrom=pcount; pattern-->pcount = i; return i; } if (dont_ask) return match_list-->0; ! If we get here, there was no obvious choice of object to make. If in ! fact we've already gone past the end of the player's typing (which ! means the match list must contain every object in scope, regardless ! of its name), then it's foolish to give an enormous list to choose ! from - instead we go and ask a more suitable question... if (match_from > num_words) jump Incomplete; ! Now we print up the question, using the equivalence classes as worked ! out by Adjudicate() so as not to repeat ourselves on plural objects... BeginActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); if (ForActivity(ASKING_WHICH_DO_YOU_MEAN_ACT)) jump SkipWhichQuestion; j = 1; marker = 0; for (i=1 : i<=number_of_classes : i++) { while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; if (match_list-->marker hasnt animate) j = 0; } if (j) PARSER_CLARIF_INTERNAL_RM('A'); else PARSER_CLARIF_INTERNAL_RM('B'); j = number_of_classes; marker = 0; for (i=1 : i<=number_of_classes : i++) { while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; k = match_list-->marker; if (match_classes-->marker > 0) print (the) k; else print (a) k; if (i < j-1) print ", "; if (i == j-1) { #Ifdef SERIAL_COMMA; if (j ~= 2) print ","; #Endif; ! SERIAL_COMMA PARSER_CLARIF_INTERNAL_RM('H'); } } print "?^"; .SkipWhichQuestion; EndActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); ! ...and get an answer: .WhichOne; #Ifdef TARGET_ZCODE; for (i=2 : ii = ' '; #Endif; ! TARGET_ZCODE answer_words=Keyboard(buffer2, parse2); ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. first_word = (parse2-->1); ! Take care of "all", because that does something too clever here to do ! later on: if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { l = multiple_object-->0; for (i=0 : ii; multiple_object-->(i+1+l) = k; } multiple_object-->0 = i+l; rtrue; } PARSER_CLARIF_INTERNAL_RM('C'); jump WhichOne; } ! Look for a comma, and interpret this as a fresh conversation command ! if so: for (i=1 : i<=answer_words : i++) if (WordFrom(i, parse2) == comma_word) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } ! If the first word of the reply can be interpreted as a verb, then ! assume that the player has ignored the question and given a new ! command altogether. ! (This is one time when it's convenient that the directions are ! not themselves verbs - thus, "north" as a reply to "Which, the north ! or south door" is not treated as a fresh command but as an answer.) #Ifdef LanguageIsVerb; if (first_word == 0) { j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; } #Endif; ! LanguageIsVerb if (first_word ~= 0) { j = first_word->#dict_par1; if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } } ! Now we insert the answer into the original typed command, as ! words additionally describing the same object ! (eg, > take red button ! Which one, ... ! > music ! becomes "take music red button". The parser will thus have three ! words to work from next time, not two.) #Ifdef TARGET_ZCODE; k = WordAddress(match_from) - buffer; l=buffer2->1+1; for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j--) j->0 = 0->(j-l); for (i=0 : i(k+i) = buffer2->(2+i); buffer->(k+l-1) = ' '; buffer->1 = buffer->1 + l; if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; #Ifnot; ! TARGET_GLULX k = WordAddress(match_from) - buffer; l = (buffer2-->0) + 1; for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j--) j->0 = j->(-l); for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); buffer->(k+l-1) = ' '; buffer-->0 = buffer-->0 + l; if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); #Endif; ! TARGET_ ! Having reconstructed the input, we warn the parser accordingly ! and get out. .RECONSTRUCT_INPUT; num_words = WordCount(); players_command = 100 + num_words; wn = 1; #Ifdef LanguageToInformese; LanguageToInformese(); ! Re-tokenise: VM_Tokenise(buffer,parse); #Endif; ! LanguageToInformese num_words = WordCount(); players_command = 100 + num_words; actors_location = ScopeCeiling(player); FollowRulebook(Activity_after_rulebooks-->READING_A_COMMAND_ACT); return REPARSE_CODE; ! Now we come to the question asked when the input has run out ! and can't easily be guessed (eg, the player typed "take" and there ! were plenty of things which might have been meant). .Incomplete; if (context == CREATURE_TOKEN) PARSER_CLARIF_INTERNAL_RM('D', actor); else PARSER_CLARIF_INTERNAL_RM('E', actor); new_line; #Ifdef TARGET_ZCODE; for (i=2 : ii=' '; #Endif; ! TARGET_ZCODE answer_words = Keyboard(buffer2, parse2); ! Look for a comma, and interpret this as a fresh conversation command ! if so: for (i=1 : i<=answer_words : i++) if (WordFrom(i, parse2) == comma_word) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } first_word=(parse2-->1); #Ifdef LanguageIsVerb; if (first_word==0) { j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; } #Endif; ! LanguageIsVerb ! Once again, if the reply looks like a command, give it to the ! parser to get on with and forget about the question... if (first_word ~= 0) { j = first_word->#dict_par1; if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } } ! ...but if we have a genuine answer, then: ! ! (1) we must glue in text suitable for anything that's been inferred. if (inferfrom ~= 0) { for (j=inferfrom : jj == PATTERN_NULL) continue; #Ifdef TARGET_ZCODE; i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; #Ifnot; ! TARGET_GLULX i = WORDSIZE + buffer-->0; (buffer-->0)++; buffer->(i++) = ' '; #Endif; ! TARGET_ #Ifdef DEBUG; if (parser_trace >= 5) print "[Gluing in inference with pattern code ", pattern-->j, "]^"; #Endif; ! DEBUG ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. parse2-->1 = 0; ! An inferred object. Best we can do is glue in a pronoun. ! (This is imperfect, but it's very seldom needed anyway.) if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { PronounNotice(pattern-->j); for (k=1 : k<=LanguagePronouns-->0 : k=k+3) if (pattern-->j == LanguagePronouns-->(k+2)) { parse2-->1 = LanguagePronouns-->k; #Ifdef DEBUG; if (parser_trace >= 5) print "[Using pronoun '", (address) parse2-->1, "']^"; #Endif; ! DEBUG break; } } else { ! An inferred preposition. parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); #Ifdef DEBUG; if (parser_trace >= 5) print "[Using preposition '", (address) parse2-->1, "']^"; #Endif; ! DEBUG } ! parse2-->1 now holds the dictionary address of the word to glue in. if (parse2-->1 ~= 0) { k = buffer + i; #Ifdef TARGET_ZCODE; @output_stream 3 k; print (address) parse2-->1; @output_stream -3; k = k-->0; for (l=i : ll = buffer->(l+2); i = i + k; buffer->1 = i-2; #Ifnot; ! TARGET_GLULX k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); i = i + k; buffer-->0 = i - WORDSIZE; #Endif; ! TARGET_ } } } ! (2) we must glue the newly-typed text onto the end. #Ifdef TARGET_ZCODE; i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; for (j=0 : j1 : i++,j++) { buffer->i = buffer2->(j+2); (buffer->1)++; if (buffer->1 == INPUT_BUFFER_LEN) break; } #Ifnot; ! TARGET_GLULX i = WORDSIZE + buffer-->0; (buffer-->0)++; buffer->(i++) = ' '; for (j=0 : j0 : i++,j++) { buffer->i = buffer2->(j+WORDSIZE); (buffer-->0)++; if (buffer-->0 == INPUT_BUFFER_LEN) break; } #Endif; ! TARGET_ ! (3) we fill up the buffer with spaces, which is unnecessary, but may ! help incorrectly-written interpreters to cope. #Ifdef TARGET_ZCODE; for (: ii = ' '; #Endif; ! TARGET_ZCODE jump RECONSTRUCT_INPUT; ]; ! end of NounDomain [ PARSER_CLARIF_INTERNAL_R; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Adjudicate ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Adjudicate context i j k good_ones last n ultimate flag offset; #Ifdef DEBUG; if (parser_trace >= 4) { print " [Adjudicating match list of size ", number_matched, " in context ", context, "^"; print " "; if (indef_mode) { print "indefinite type: "; if (indef_type & OTHER_BIT) print "other "; if (indef_type & MY_BIT) print "my "; if (indef_type & THAT_BIT) print "that "; if (indef_type & PLURAL_BIT) print "plural "; if (indef_type & LIT_BIT) print "lit "; if (indef_type & UNLIT_BIT) print "unlit "; if (indef_owner ~= 0) print "owner:", (name) indef_owner; new_line; print " number wanted: "; if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; new_line; print " most likely GNAs of names: ", indef_cases, "^"; } else print "definite object^"; } #Endif; ! DEBUG j = number_matched-1; good_ones = 0; last = match_list-->0; for (i=0 : i<=j : i++) { n = match_list-->i; match_scores-->i = good_ones; ultimate = ScopeCeiling(n); if (context==HELD_TOKEN && parent(n)==actor) { good_ones++; last=n; } if (context==MULTI_TOKEN && ultimate==ScopeCeiling(actor) && n~=actor && n hasnt concealed && n hasnt scenery) { good_ones++; last=n; } if (context==MULTIHELD_TOKEN && parent(n)==actor) { good_ones++; last=n; } if (context==MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { if (advance_warning==-1) { if (context==MULTIEXCEPT_TOKEN) { good_ones++; last=n; } if (context==MULTIINSIDE_TOKEN) { if (parent(n)~=actor) { good_ones++; last=n; } } } else { if (context==MULTIEXCEPT_TOKEN && n~=advance_warning) { good_ones++; last=n; } if (context==MULTIINSIDE_TOKEN && n in advance_warning) { good_ones++; last=n; } } } if (context==CREATURE_TOKEN && CreatureTest(n)==1) { good_ones++; last=n; } match_scores-->i = 1000*(good_ones - match_scores-->i); } if (good_ones == 1) { if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0 && context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { BeginActivity(DECIDING_WHETHER_ALL_INC_ACT, last); if ((ForActivity(DECIDING_WHETHER_ALL_INC_ACT, last)) && (RulebookFailed())) good_ones = 0; EndActivity(DECIDING_WHETHER_ALL_INC_ACT, last); if (good_ones == 1) return last; } else { return last; } } ! If there is ambiguity about what was typed, but it definitely wasn't ! animate as required, then return anything; higher up in the parser ! a suitable error will be given. (This prevents a question being asked.) if (context == CREATURE_TOKEN && good_ones == 0) return match_list-->0; if (indef_mode == 0) indef_type=0; ScoreMatchL(context); if (number_matched == 0) return -1; if (indef_mode == 0) { ! Is there now a single highest-scoring object? i = SingleBestGuess(); if (i >= 0) { #Ifdef DEBUG; if (parser_trace >= 4) print " Single best-scoring object returned.]^"; #Endif; ! DEBUG return i; } } if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (context ~= MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { etype = MULTI_PE; return -1; } i = 0; offset = multiple_object-->0; for (j=BestGuess(): j~=-1 && i(i+offset) = j; #Ifdef DEBUG; if (parser_trace >= 4) print " Accepting it^"; #Endif; ! DEBUG } else { i = i; #Ifdef DEBUG; if (parser_trace >= 4) print " Rejecting it^"; #Endif; ! DEBUG } } if (i < indef_wanted && indef_wanted < INDEF_ALL_WANTED) { etype = TOOFEW_PE; multi_wanted = indef_wanted; if (parser_trace >= 4) print "Too few found^"; multi_had=i; return -1; } multiple_object-->0 = i+offset; multi_context = context; #Ifdef DEBUG; if (parser_trace >= 4) print " Made multiple object of size ", i, "]^"; #Endif; ! DEBUG return 1; } for (i=0 : ii = 0; n = 1; for (i=0 : ii == 0) { match_classes-->i = n++; flag = 0; for (j=i+1 : jj == 0 && Identical(match_list-->i, match_list-->j) == 1) { flag=1; match_classes-->j = match_classes-->i; } if (flag == 1) match_classes-->i = 1-n; } n--; number_of_classes = n; #Ifdef DEBUG; if (parser_trace >= 4) { print " Grouped into ", n, " possibilities by name:^"; for (i=0 : ii > 0) print " ", (The) match_list-->i, " (", match_list-->i, ") --- group ", match_classes-->i, "^"; } #Endif; ! DEBUG if (indef_mode == 0) { if (n > 1) { k = -1; for (i=0 : ii > k) { k = match_scores-->i; j = match_classes-->i; j = j*j; flag = 0; } else if (match_scores-->i == k) { if ((match_classes-->i) * (match_classes-->i) ~= j) flag = 1; } } if (flag) { #Ifdef DEBUG; if (parser_trace >= 4) print " Unable to choose best group, so ask player.]^"; #Endif; ! DEBUG return 0; } #Ifdef DEBUG; if (parser_trace >= 4) print " Best choices are all from the same group.^"; #Endif; ! DEBUG } } ! When the player is really vague, or there's a single collection of ! indistinguishable objects to choose from, choose the one the player ! most recently acquired, or if the player has none of them, then ! the one most recently put where it is. if (n == 1) dont_infer = true; return BestGuess(); ]; ! Adjudicate ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: ReviseMulti ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ReviseMulti second_p i low; #Ifdef DEBUG; if (parser_trace >= 4) print " Revising multiple object list of size ", multiple_object-->0, " with 2nd ", (name) second_p, "^"; #Endif; ! DEBUG if (multi_context == MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { for (i=1,low=0 : i<=multiple_object-->0 : i++) { if ( (multi_context==MULTIEXCEPT_TOKEN && multiple_object-->i ~= second_p) || (multi_context==MULTIINSIDE_TOKEN && multiple_object-->i in second_p)) { low++; multiple_object-->low = multiple_object-->i; } } multiple_object-->0 = low; } if (multi_context == MULTI_TOKEN && action_to_be == ##Take) { #Ifdef DEBUG; if (parser_trace >= 4) print " Token 2 plural case: number with actor ", low, "^"; #Endif; ! DEBUG if (take_all_rule == 2) { for (i=1,low=0 : i<=multiple_object-->0 : i++) { if (ScopeCeiling(multiple_object-->i) == ScopeCeiling(actor)) { low++; multiple_object-->low = multiple_object-->i; } } multiple_object-->0 = low; } } i = multiple_object-->0; #Ifdef DEBUG; if (parser_trace >= 4) print " Done: new size ", i, "^"; #Endif; ! DEBUG if (i == 0) return NOTHING_PE; return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Match List ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MakeMatch obj quality i; #Ifdef DEBUG; if (parser_trace >= 6) print " Match with quality ",quality,"^"; #Endif; ! DEBUG if (token_filter ~= 0 && ConsultNounFilterToken(obj) == 0) { #Ifdef DEBUG; if (parser_trace >= 6) print " Match filtered out: token filter ", token_filter, "^"; #Endif; ! DEBUG rtrue; } if (quality < match_length) rtrue; if (quality > match_length) { match_length = quality; number_matched = 0; } else { if (number_matched >= MATCH_LIST_WORDS) rtrue; for (i=0 : ii == obj) rtrue; } match_list-->number_matched++ = obj; #Ifdef DEBUG; if (parser_trace >= 6) print " Match added to list^"; #Endif; ! DEBUG ]; [ ConsultNounFilterToken obj sn rv; if (token_filter ofclass Routine) { sn = noun; noun = obj; rv = indirect(token_filter); noun = sn; return rv; } if (obj has (token_filter-1)) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: ScoreMatchL ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant SCORE__CHOOSEOBJ = 1000; Constant SCORE__IFGOOD = 500; Constant SCORE__UNCONCEALED = 100; Constant SCORE__BESTLOC = 60; Constant SCORE__NEXTBESTLOC = 40; Constant SCORE__NOTCOMPASS = 20; Constant SCORE__NOTSCENERY = 10; Constant SCORE__NOTACTOR = 5; Constant SCORE__GNA = 1; Constant SCORE__DIVISOR = 20; Constant PREFER_HELD; [ ScoreMatchL context its_owner its_score obj i j threshold met a_s l_s; ! if (indef_type & OTHER_BIT ~= 0) threshold++; if (indef_type & MY_BIT ~= 0) threshold++; if (indef_type & THAT_BIT ~= 0) threshold++; if (indef_type & LIT_BIT ~= 0) threshold++; if (indef_type & UNLIT_BIT ~= 0) threshold++; if (indef_owner ~= nothing) threshold++; #Ifdef DEBUG; if (parser_trace >= 4) print " Scoring match list: indef mode ", indef_mode, " type ", indef_type, ", satisfying ", threshold, " requirements:^"; #Endif; ! DEBUG #ifdef PREFER_HELD; a_s = SCORE__BESTLOC; l_s = SCORE__NEXTBESTLOC; if (action_to_be == ##Take or ##Remove) { a_s = SCORE__NEXTBESTLOC; l_s = SCORE__BESTLOC; } context = context; ! silence warning #ifnot; a_s = SCORE__NEXTBESTLOC; l_s = SCORE__BESTLOC; if (context == HELD_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN) { a_s = SCORE__BESTLOC; l_s = SCORE__NEXTBESTLOC; } #endif; ! PREFER_HELD for (i=0 : ii; its_owner = parent(obj); its_score=0; met=0; ! if (indef_type & OTHER_BIT ~= 0 ! && obj ~= itobj or himobj or herobj) met++; if (indef_type & MY_BIT ~= 0 && its_owner == actor) met++; if (indef_type & THAT_BIT ~= 0 && its_owner == actors_location) met++; if (indef_type & LIT_BIT ~= 0 && obj has light) met++; if (indef_type & UNLIT_BIT ~= 0 && obj hasnt light) met++; if (indef_owner ~= 0 && its_owner == indef_owner) met++; if (met < threshold) { #Ifdef DEBUG; if (parser_trace >= 4) print " ", (The) match_list-->i, " (", match_list-->i, ") in ", (the) its_owner, " is rejected (doesn't match descriptors)^"; #Endif; ! DEBUG match_list-->i = -1; } else { its_score = 0; if (obj hasnt concealed) its_score = SCORE__UNCONCEALED; if (its_owner == actor) its_score = its_score + a_s; else if (its_owner == actors_location) its_score = its_score + l_s; else if (its_owner ~= compass) its_score = its_score + SCORE__NOTCOMPASS; its_score = its_score + SCORE__CHOOSEOBJ * ChooseObjects(obj, 2); if (obj hasnt scenery) its_score = its_score + SCORE__NOTSCENERY; if (obj ~= actor) its_score = its_score + SCORE__NOTACTOR; ! A small bonus for having the correct GNA, ! for sorting out ambiguous articles and the like. if (indef_cases & (PowersOfTwo_TB-->(GetGNAOfObject(obj)))) its_score = its_score + SCORE__GNA; match_scores-->i = match_scores-->i + its_score; #Ifdef DEBUG; if (parser_trace >= 4) print " ", (The) match_list-->i, " (", match_list-->i, ") in ", (the) its_owner, " : ", match_scores-->i, " points^"; #Endif; ! DEBUG } } for (i=0 : ii == -1) { if (i == number_matched-1) { number_matched--; break; } for (j=i : jj = match_list-->(j+1); match_scores-->j = match_scores-->(j+1); } number_matched--; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: BestGuess ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BestGuess earliest its_score best i; earliest = 0; best = -1; for (i=0 : ii >= 0) { its_score = match_scores-->i; if (its_score > best) { best = its_score; earliest = i; } } } #Ifdef DEBUG; if (parser_trace >= 4) if (best < 0) print " Best guess ran out of choices^"; else print " Best guess ", (the) match_list-->earliest, " (", match_list-->earliest, ")^"; #Endif; ! DEBUG if (best < 0) return -1; i = match_list-->earliest; match_list-->earliest = -1; return i; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: SingleBestGuess ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SingleBestGuess earliest its_score best i; earliest = -1; best = -1000; for (i=0 : ii; if (its_score == best) earliest = -1; if (its_score > best) { best = its_score; earliest = match_list-->i; } } return earliest; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Identical ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Identical o1 o2 p1 p2 n1 n2 i j flag; if (o1 == o2) rtrue; ! This should never happen, but to be on the safe side if (o1 == 0 || o2 == 0) rfalse; ! Similarly if (o1 ofclass K3_direction || o2 ofclass K3_direction) rfalse; ! Saves time ! What complicates things is that o1 or o2 might have a parsing routine, ! so the parser can't know from here whether they are or aren't the same. ! If they have different parsing routines, we simply assume they're ! different. If they have the same routine (which they probably got from ! a class definition) then the decision process is as follows: ! ! the routine is called (with self being o1, not that it matters) ! with noun and second being set to o1 and o2, and action being set ! to the fake action TheSame. If it returns -1, they are found ! identical; if -2, different; and if >=0, then the usual method ! is used instead. if (o1.parse_name ~= 0 || o2.parse_name ~= 0) { if (o1.parse_name ~= o2.parse_name) rfalse; parser_action = ##TheSame; parser_one = o1; parser_two = o2; j = wn; i = RunRoutines(o1,parse_name); wn = j; if (i == -1) rtrue; if (i == -2) rfalse; } ! This is the default algorithm: do they have the same words in their ! "name" (i.e. property no. 1) properties. (Note that the following allows ! for repeated words and words in different orders.) p1 = o1.&1; n1 = (o1.#1)/WORDSIZE; p2 = o2.&1; n2 = (o2.#1)/WORDSIZE; ! for (i=0 : ii, " "; } new_line; ! for (i=0 : ii, " "; } new_line; for (i=0 : ii == p2-->j) flag = 1; if (flag == 0) rfalse; } for (j=0 : ji == p2-->j) flag = 1; if (flag == 0) rfalse; } ! print "Which are identical!^"; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Print Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintInferredCommand from singleton_noun; singleton_noun = FALSE; if ((from ~= 0) && (from == pcount-1) && (pattern-->from > 1) && (pattern-->from < REPARSE_CODE)) singleton_noun = TRUE; if (singleton_noun) { BeginActivity(CLARIFYING_PARSERS_CHOICE_ACT, pattern-->from); if (ForActivity(CLARIFYING_PARSERS_CHOICE_ACT, pattern-->from) == 0) { print "("; PrintCommand(from); print ")^"; } EndActivity(CLARIFYING_PARSERS_CHOICE_ACT, pattern-->from); } else { print "("; PrintCommand(from); print ")^"; } ]; [ PrintCommand from i k spacing_flag; if (from == 0) { i = verb_word; if (LanguageVerb(i) == 0) if (PrintVerb(i) == 0) print (address) i; from++; spacing_flag = true; } for (k=from : kk; if (i == PATTERN_NULL) continue; if (spacing_flag) print (char) ' '; if (i == 0) { PARSER_CLARIF_INTERNAL_RM('F'); jump TokenPrinted; } if (i == 1) { PARSER_CLARIF_INTERNAL_RM('G'); jump TokenPrinted; } if (i >= REPARSE_CODE) print (address) VM_NumberToDictionaryAddress(i-REPARSE_CODE); else if (i ofclass K3_direction) print (LanguageDirection) i; ! the direction name as adverb else print (the) i; .TokenPrinted; spacing_flag = true; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: CantSee ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CantSee i w e; saved_oops=oops_from; if (scope_token ~= 0) { scope_error = scope_token; return ASKSCOPE_PE; } wn--; w = NextWord(); e = CANTSEE_PE; if (w == pronoun_word) { w = NextWordStopped(); wn--; if ((w == -1) || (line_token-->(pcount) ~= ENDIT_TOKEN)) { if (pcount > 0) AnalyseToken(line_token-->(pcount-1)); if ((pcount > 0) && (found_ttype == ROUTINE_FILTER_TT or ATTR_FILTER_TT)) e = NOTINCONTEXT_PE; else { pronoun__word = pronoun_word; pronoun__obj = pronoun_obj; e = ITGONE_PE; } } } if (etype > e) return etype; return e; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Multiple Object List ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MultiAdd o i j; i = multiple_object-->0; if (i == MATCH_LIST_WORDS-1) { toomany_flag = 1; rtrue; } for (j=1 : j<=i : j++) if (o == multiple_object-->j) rtrue; i++; multiple_object-->i = o; multiple_object-->0 = i; ]; [ MultiSub o i j k; i = multiple_object-->0; for (j=1 : j<=i : j++) if (o == multiple_object-->j) { for (k=j : k<=i : k++) multiple_object-->k = multiple_object-->(k+1); multiple_object-->0 = --i; return 0; } return VAGUE_PE; ]; [ MultiFilter attr i j o; .MFiltl; i = multiple_object-->0; for (j=1 : j<=i : j++) { o = multiple_object-->j; if (o hasnt attr) { MultiSub(o); jump Mfiltl; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Scope ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PlaceInScope O opts ws; ! If opts is set, do not place contents in scope ws = wn; wn = match_from; if (opts == false) DoScopeActionAndRecurse(O); else DoScopeAction(O); wn = ws; return; ]; [ AddToScope obj; if (ats_flag >= 2) DoScopeActionAndRecurse(obj, 0, ats_flag-2); if (ats_flag == 1) { if (HasLightSource(obj)==1) ats_hls = 1; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Scope Level 0 ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestScope obj act a al sr x y; x = parser_one; y = parser_two; parser_one = obj; parser_two = 0; a = actor; al = actors_location; sr = scope_reason; scope_reason = TESTSCOPE_REASON; if (act == 0) actor = player; else actor = act; actors_location = ScopeCeiling(actor); SearchScope(actors_location, actor, 0); scope_reason = sr; actor = a; actors_location = al; parser_one = x; x = parser_two; parser_two = y; return x; ]; [ LoopOverScope routine act x y a al; x = parser_one; y = scope_reason; a = actor; al = actors_location; parser_one = routine; if (act == 0) actor = player; else actor = act; actors_location = ScopeCeiling(actor); scope_reason = LOOPOVERSCOPE_REASON; SearchScope(actors_location, actor, 0); parser_one = x; scope_reason = y; actor = a; actors_location = al; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: SearchScope ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SearchScope domain1 domain2 context i; if (domain1 == 0) return; ! (a) if (scope_token) { scope_stage = 2; #Ifdef DEBUG; if (parser_trace >= 3) print " [Scope routine called at stage 2]^"; #Endif; if (indirect(scope_token) ~= 0) rtrue; } ! (b) BeginActivity(DECIDING_SCOPE_ACT, actor); if (ForActivity(DECIDING_SCOPE_ACT, actor) == false) { ! (c.1) if ((scope_reason == PARSING_REASON) && (context == MULTIINSIDE_TOKEN) && (advance_warning ~= -1)) { if (IsSeeThrough(advance_warning) == 1) ScopeWithin(advance_warning, 0, context); } else { ! (c.2) if ((scope_reason == PARSING_REASON) && (context ~= CREATURE_TOKEN) && (indef_mode == 0) && (domain1 == actors_location)) ScopeWithin(compass); ! (c.3) if (domain1 has supporter or container) DoScopeAction(domain1); ScopeWithin(domain1, domain2, context); ! (c.4) if (domain2) { if (domain2 has supporter or container) DoScopeAction(domain2); ScopeWithin(domain2, 0, context); } } ! (c.5) if (thedark == domain1 or domain2) { DoScopeActionAndRecurse(actor, actor, context); if (parent(actor) has supporter or container) DoScopeActionAndRecurse(parent(actor), parent(actor), context); } } EndActivity(DECIDING_SCOPE_ACT, actor); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: ScopeWithin ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ScopeWithin domain nosearch context obj next_obj; if (domain == 0) rtrue; ! Look through the objects in the domain, avoiding "objectloop" in case ! movements occur. obj = child(domain); while (obj) { next_obj = sibling(obj); if ((domain == actor) || (TestConcealment(domain, obj) == false)) DoScopeActionAndRecurse(obj, nosearch, context); obj = next_obj; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: DoScopeActionAndRecurse ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DoScopeActionAndRecurse domain nosearch context i ad n obj next_obj; DoScopeAction(domain); ! (a) if ((domain ~= nosearch) && ((domain ofclass K1_room or K8_person) || (IsSeeThrough(domain) == 1))) { obj = child(domain); while (obj) { next_obj = sibling(obj); if ((domain == actor) || (TestConcealment(domain, obj) == false)) DoScopeActionAndRecurse(obj, nosearch, context); obj = next_obj; } } ! (b) if (domain provides component_child) { obj = domain.component_child; while (obj) { next_obj = obj.component_sibling; if ((domain == actor) || (TestConcealment(domain, obj) == false)) DoScopeActionAndRecurse(obj, 0, context); obj = next_obj; } } ! (c) ad = domain.&add_to_scope; if (ad ~= 0) { ! Test if the property value is not an object. #Ifdef TARGET_ZCODE; i = (UnsignedCompare(ad-->0, top_object) > 0); #Ifnot; ! TARGET_GLULX i = (((ad-->0)->0) ~= $70); #Endif; ! TARGET_ if (i) { ats_flag = 2+context; RunRoutines(domain, add_to_scope); ats_flag = 0; } else { n = domain.#add_to_scope; for (i=0 : (WORDSIZE*i)i) DoScopeActionAndRecurse(ad-->i, 0, context); } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: DoScopeAction ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DoScopeAction item; #Ifdef DEBUG; if (parser_trace >= 6) print "[DSA on ", (the) item, " with reason = ", scope_reason, " p1 = ", parser_one, " p2 = ", parser_two, "]^"; #Endif; ! DEBUG @push parser_one; @push scope_reason; switch(scope_reason) { TESTSCOPE_REASON: if (item == parser_one) parser_two = 1; LOOPOVERSCOPE_REASON: if (parser_one ofclass Routine) indirect(parser_one, item); PARSING_REASON, TALKING_REASON: MatchTextAgainstObject(item); } @pull scope_reason; @pull parser_one; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Parsing Object Names ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MatchTextAgainstObject item i; if (token_filter ~= 0 && ConsultNounFilterToken(item) == 0) return; if (match_from <= num_words) { ! If there's any text to match, that is wn = match_from; i = NounWord(); if ((i == 1) && (player == item)) MakeMatch(item, 1); ! "me" if ((i >= 2) && (i < 128) && (LanguagePronouns-->i == item)) MakeMatch(item, 1); } ! Construing the current word as the start of a noun, can it refer to the ! object? wn = match_from; if (TryGivenObject(item) > 0) if (indef_nspec_at > 0 && match_from ~= indef_nspec_at) { ! This case arises if the player has typed a number in ! which is hypothetically an indefinite descriptor: ! e.g. "take two clubs". We have just checked the object ! against the word "clubs", in the hope of eventually finding ! two such objects. But we also backtrack and check it ! against the words "two clubs", in case it turns out to ! be the 2 of Clubs from a pack of cards, say. If it does ! match against "two clubs", we tear up our original ! assumption about the meaning of "two" and lapse back into ! definite mode. wn = indef_nspec_at; if (TryGivenObject(item) > 0) { match_from = indef_nspec_at; ResetDescriptors(); } wn = match_from; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: TryGivenObject ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TryGivenObject obj nomatch threshold k w j; #Ifdef DEBUG; if (parser_trace >= 5) print " Trying ", (the) obj, " (", obj, ") at word ", wn, "^"; #Endif; ! DEBUG if (nomatch && obj == 0) return 0; ! if (nomatch) print "*** TryGivenObject *** on ", (the) obj, " at wn = ", wn, "^"; dict_flags_of_noun = 0; ! If input has run out then always match, with only quality 0 (this saves ! time). if (wn > num_words) { if (nomatch) return 0; if (indef_mode ~= 0) dict_flags_of_noun = $$01110000; ! Reject "plural" bit MakeMatch(obj,0); #Ifdef DEBUG; if (parser_trace >= 5) print " Matched (0)^"; #Endif; ! DEBUG return 1; } ! Ask the object to parse itself if necessary, sitting up and taking notice ! if it says the plural was used: if (obj.parse_name~=0) { parser_action = NULL; j=wn; k = RunRoutines(obj,parse_name); if (k > 0) { wn=j+k; .MMbyPN; if (parser_action == ##PluralFound) dict_flags_of_noun = dict_flags_of_noun | 4; if (dict_flags_of_noun & 4) { if (~~allow_plurals) k = 0; else { if (indef_mode == 0) { indef_mode = 1; indef_type = 0; indef_wanted = 0; } indef_type = indef_type | PLURAL_BIT; if (indef_wanted == 0) indef_wanted = INDEF_ALL_WANTED; } } #Ifdef DEBUG; if (parser_trace >= 5) print " Matched (", k, ")^"; #Endif; ! DEBUG if (nomatch == false) MakeMatch(obj,k); return k; } if (k == 0) jump NoWordsMatch; } ! The default algorithm is simply to count up how many words pass the ! Refers test: parser_action = NULL; w = NounWord(); if (w == 1 && player == obj) { k=1; jump MMbyPN; } if (w >= 2 && w < 128 && (LanguagePronouns-->w == obj)) { k = 1; jump MMbyPN; } if (Refers(obj, wn-1) == 0) { .NoWordsMatch; if (indef_mode ~= 0) { k = 0; parser_action = NULL; jump MMbyPN; } rfalse; } threshold = 1; dict_flags_of_noun = (w->#dict_par1) & $$01110100; w = NextWord(); while (Refers(obj, wn-1)) { threshold++; if (w) dict_flags_of_noun = dict_flags_of_noun | ((w->#dict_par1) & $$01110100); w = NextWord(); } k = threshold; jump MMbyPN; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Refers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Refers obj wnum wd k l m; if (obj == 0) rfalse; #Ifdef LanguageRefers; k = LanguageRefers(obj,wnum); if (k >= 0) return k; #Endif; ! LanguageRefers k = wn; wn = wnum; wd = NextWordStopped(); wn = k; if (parser_inflection >= 256) { k = indirect(parser_inflection, obj, wd); if (k >= 0) return k; m = -k; } else m = parser_inflection; k = obj.&m; l = (obj.#m)/WORDSIZE-1; for (m=0 : m<=l : m++) if (wd == k-->m) rtrue; rfalse; ]; [ WordInProperty wd obj prop k l m; k = obj.∝ l = (obj.#prop)/WORDSIZE-1; for (m=0 : m<=l : m++) if (wd == k-->m) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: NounWord ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NounWord i j s; i = NextWord(); if (i == 0) rfalse; if (i == ME1__WD or ME2__WD or ME3__WD) return 1; s = LanguagePronouns-->0; for (j=1 : j<=s : j=j+3) if (i == LanguagePronouns-->j) return j+2; if ((i->#dict_par1)&128 == 0) rfalse; return i; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: TryNumber ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TryNumber wordnum i j c num len mul tot d digit; i = wn; wn = wordnum; j = NextWord(); wn = i; j = NumberWord(j); ! Test for verbal forms ONE to THIRTY if (j >= 1) return j; #Ifdef TARGET_ZCODE; i = wordnum*4+1; j = parse->i; num = j+buffer; len = parse->(i-1); #Ifnot; ! TARGET_GLULX i = wordnum*3; j = parse-->i; num = j+buffer; len = parse-->(i-1); #Endif; ! TARGET_ if (len >= 4) mul=1000; if (len == 3) mul=100; if (len == 2) mul=10; if (len == 1) mul=1; tot = 0; c = 0; len = len-1; for (c=0 : c<=len : c++) { digit=num->c; if (digit == '0') { d = 0; jump digok; } if (digit == '1') { d = 1; jump digok; } if (digit == '2') { d = 2; jump digok; } if (digit == '3') { d = 3; jump digok; } if (digit == '4') { d = 4; jump digok; } if (digit == '5') { d = 5; jump digok; } if (digit == '6') { d = 6; jump digok; } if (digit == '7') { d = 7; jump digok; } if (digit == '8') { d = 8; jump digok; } if (digit == '9') { d = 9; jump digok; } return -1000; .digok; tot = tot+mul*d; mul = mul/10; } if (len > 3) tot=10000; return tot; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Gender ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GetGender person; if (person hasnt female) rtrue; rfalse; ]; [ GetGNAOfObject obj case gender; if (obj hasnt animate) case = 6; if (obj has male) gender = male; if (obj has female) gender = female; if (obj has neuter) gender = neuter; if (gender == 0) { if (case == 0) gender = LanguageAnimateGender; else gender = LanguageInanimateGender; } if (gender == female) case = case + 1; if (gender == neuter) case = case + 2; if (obj has pluralname) case = case + 3; return case; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Noticing Plurals ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DetectPluralWord at n i w swn outcome; swn = wn; wn = at; for (i=0:i#dict_par1) & $$00000100) { parser_action = ##PluralFound; outcome = true; } } wn = swn; return outcome; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Pronoun Handling ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SetPronoun dword value x; for (x=1 : x<=LanguagePronouns-->0 : x=x+3) if (LanguagePronouns-->x == dword) { LanguagePronouns-->(x+2) = value; return; } RunTimeError(14); ]; [ PronounValue dword x; for (x=1 : x<=LanguagePronouns-->0 : x=x+3) if (LanguagePronouns-->x == dword) return LanguagePronouns-->(x+2); return 0; ]; [ ResetVagueWords obj; PronounNotice(obj); ]; [ PronounNotice obj x bm g; if (obj == player) return; g = (GetGNAOfObject(obj)); bm = PowersOfTwo_TB-->g; for (x=1 : x<=LanguagePronouns-->0 : x=x+3) if (bm & (LanguagePronouns-->(x+1)) ~= 0) LanguagePronouns-->(x+2) = obj; if (((g % 6) < 3) && (obj has ambigpluralname)) { g = g + 3; bm = PowersOfTwo_TB-->g; for (x=1 : x<=LanguagePronouns-->0 : x=x+3) if (bm & (LanguagePronouns-->(x+1)) ~= 0) LanguagePronouns-->(x+2) = obj; } ]; [ PronounNoticeHeldObjects x; #IFNDEF MANUAL_PRONOUNS; objectloop(x in player) PronounNotice(x); #ENDIF; x = 0; ! To prevent a "not used" error rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Yes/No Questions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ YesOrNo i j; for (::) { #Ifdef TARGET_ZCODE; if (location == nothing || parent(player) == nothing) read buffer2 parse2; else read buffer2 parse2 DrawStatusLine; j = parse2->1; #Ifnot; ! TARGET_GLULX; if (location ~= nothing && parent(player) ~= nothing) DrawStatusLine(); KeyboardPrimitive(buffer2, parse2); j = parse2-->0; #Endif; ! TARGET_ if (j) { ! at least one word entered i = parse2-->1; if (i == YES1__WD or YES2__WD or YES3__WD) rtrue; if (i == NO1__WD or NO2__WD or NO3__WD) rfalse; } YES_OR_NO_QUESTION_INTERNAL_RM('A'); print "> "; } ]; [ YES_OR_NO_QUESTION_INTERNAL_R; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Number Words ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NumberWord o i n; n = LanguageNumbers-->0; for (i=1 : i<=n : i=i+2) if (o == LanguageNumbers-->i) return LanguageNumbers-->(i+1); return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Choose Objects ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== !Constant COBJ_DEBUG; ! the highest value returned by CheckDPMR (see the Standard Rules) Constant HIGHEST_DPMR_SCORE = 4; Array alt_match_list --> (MATCH_LIST_WORDS+1); #ifdef TARGET_GLULX; [ COBJ__Copy words from to i; for (i=0: ii = from-->i; ]; #ifnot; [ COBJ__Copy words from to bytes; bytes = words * 2; @copy_table from to bytes; ]; #endif; ! swap alt_match_list with match_list/number_matched [ COBJ__SwapMatches i x; ! swap the counts x = number_matched; number_matched = alt_match_list-->0; alt_match_list-->0 = x; ! swap the values if (x < number_matched) x = number_matched; for (i=x: i>0: i--) { x = match_list-->(i-1); match_list-->(i-1) = alt_match_list-->i; alt_match_list-->i = x; } ]; [ ChooseObjects obj code l i swn spcount; if (code<2) rfalse; if (cobj_flag == 1) { .CodeOne; if (parameters > 0) { #ifdef COBJ_DEBUG; print "[scoring ", (the) obj, " (second)]^"; #endif; return ScoreDabCombo(parser_results-->INP1_PRES, obj); } else { #ifdef COBJ_DEBUG; print "[scoring ", (the) obj, " (first) in ", alt_match_list-->0, " combinations]^"; #endif; l = 0; for (i=1: i<=alt_match_list-->0: i++) { spcount = ScoreDabCombo(obj, alt_match_list-->i); if (spcount == HIGHEST_DPMR_SCORE) { #ifdef COBJ_DEBUG; print "[scored ", spcount, " - best possible]^"; #endif; return spcount; } if (spcount>l) l = spcount; } return l; } } if (cobj_flag == 2) { .CodeTwo; #ifdef COBJ_DEBUG; print "[scoring ", (the) obj, " (simple); parameters = ", parameters, " aw = ", advance_warning, "]^"; #endif; @push action_to_be; if (parameters==0) { if (advance_warning > 0) l = ScoreDabCombo(obj, advance_warning); else l = ScoreDabCombo(obj, 0); } else { l = ScoreDabCombo(parser_results-->INP1_PRES, obj); } @pull action_to_be; return l; } #ifdef COBJ_DEBUG; print "[choosing a cobj strategy: "; #endif; swn = wn; spcount = pcount; while (line_ttype-->pcount == PREPOSITION_TT) pcount++; if (line_ttype-->pcount == ELEMENTARY_TT) { if (line_tdata-->pcount == TOPIC_TOKEN) { pcount = spcount; jump CodeTwo; } while (wn <= num_words) { l = NextWordStopped(); wn--; if (l == THEN1__WD) break; if ( (l ~= -1 or 0) && (l->#dict_par1) &8 ) { wn++; continue; } ! if preposition if (l == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { wn++; continue; } SafeSkipDescriptors(); ! save the current match state @push match_length; @push token_filter; @push match_from; alt_match_list-->0 = number_matched; COBJ__Copy(number_matched, match_list, alt_match_list+WORDSIZE); ! now get all the matches for the second noun match_length = 0; number_matched = 0; match_from = wn; token_filter = 0; SearchScope(actor, actors_location, line_tdata-->pcount); #ifdef COBJ_DEBUG; print number_matched, " possible second nouns]^"; #endif; wn = swn; cobj_flag = 1; ! restore match variables COBJ__SwapMatches(); @pull match_from; @pull token_filter; @pull match_length; pcount = spcount; jump CodeOne; } } pcount = spcount; wn = swn; #ifdef COBJ_DEBUG; print "nothing interesting]^"; #endif; cobj_flag = 2; jump CodeTwo; ]; [ ScoreDabCombo a b result; @push action; @push act_requester; @push noun; @push second; action = action_to_be; act_requester = player; if (action_reversed) { noun = b; second = a; } else { noun = a; second = b; } result = CheckDPMR(); @pull second; @pull noun; @pull act_requester; @pull action; #ifdef COBJ_DEBUG; print "[", (the) a, " / ", (the) b, " => ", result, "]^"; #endif; return result; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Parser.i6t: Default Topic ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DefaultTopic; return GPR_FAIL; ]; [ ParserError error_type; if (error_type) PrintSingleParagraph(error_type); rfalse; ]; Object InformLibrary "(Inform Library)" has proper; Array Protect_I7_Arrays --> 16339 12345; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Order of Play ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Main ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global EarlyInTurnSequence; Global IterationsOfTurnSequence; [ Main; #ifdef TARGET_ZCODE; max_z_object = #largest_object - 255; #endif; ClearRTP(); FollowRulebook(STARTUP_RB); #ifdef DEBUG; InternalTestCases(); #endif; while (true) { while (deadflag == false) { EarlyInTurnSequence = true; action = ##Wait; meta = false; noun = nothing; second = nothing; actor = player; FollowRulebook(TURN_SEQUENCE_RB); IterationsOfTurnSequence++; } if (FollowRulebook(SHUTDOWN_RB) == false) return; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Virtual Machine Startup Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ VIRTUAL_MACHINE_STARTUP_R; CarryOutActivity(STARTING_VIRTUAL_MACHINE_ACT); VM_Initialise(); print "^^^"; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Initial Situation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant PLAYER_OBJECT_INIS = 0; Constant START_OBJECT_INIS = 1; Constant START_ROOM_INIS = 2; Constant START_TIME_INIS = 3; Constant DONE_INIS = 4; Array InitialSituation --> selfobj nothing I128_mysterious_room 540 0; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Initialise Memory Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ INITIALISE_MEMORY_R; #ifdef TARGET_GLULX; VM_PreInitialise(); #Endif; #Ifdef LanguageInitialise; LanguageInitialise(); #Endif; not_yet_in_play = true; #ifdef I7_LOOKMODE; lookmode = I7_LOOKMODE; #endif; player = InitialSituation-->PLAYER_OBJECT_INIS; the_time = InitialSituation-->START_TIME_INIS; real_location = nothing; location = nothing; CreatePropertyOffsets(); HeapInitialise(); ! Create a completely unused memory allocation heap StackFramingInitialise(); ! Create an empty stack CreateDynamicRelations(); ! Create relation structures on the heap rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Seed Random Number Generator Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SEED_RANDOM_NUMBER_GENERATOR_R i; if (0) VM_Seed_RNG(0); for (i=1: i<=100: i++) random(i); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Position Player In Model World Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ POSITION_PLAYER_IN_MODEL_R player_to_be; player = selfobj; player_to_be = InitialSituation-->PLAYER_OBJECT_INIS; location = LocationOf(player_to_be); if (location == 0) { location = InitialSituation-->START_ROOM_INIS; if (InitialSituation-->START_OBJECT_INIS) move player_to_be to InitialSituation-->START_OBJECT_INIS; else move player_to_be to location; } if (player_to_be ~= player) { remove selfobj; ChangePlayer(player_to_be); } else { real_location = location; SilentlyConsiderLight(); } NOTE_OBJECT_ACQUISITIONS_R(); MoveFloatingObjects(); actor = player; act_requester = nothing; actors_location = real_location; action = ##Wait; InitialSituation-->DONE_INIS = true; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Parse Command Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant ACTION_PRES = 0; Constant NO_INPS_PRES = 1; Constant INP1_PRES = 2; Constant INP2_PRES = 3; ! Parser.i6t code assumes this is INP1_PRES + 1 [ PARSE_COMMAND_R; if (EarlyInTurnSequence == false) rfalse; ! Prevent use outside top level not_yet_in_play = false; Parser__parse(); TreatParserResults(); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Treat Parser Results ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TreatParserResults; if (parser_results-->ACTION_PRES == ##MistakeAction) meta = true; if (parser_results-->ACTION_PRES == ##Tell && parser_results-->INP1_PRES == player && actor ~= player) { parser_results-->ACTION_PRES = ##Ask; parser_results-->INP1_PRES = actor; actor = player; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Generate Action Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GENERATE_ACTION_R i; if (EarlyInTurnSequence == false) rfalse; ! Prevent use outside top level EarlyInTurnSequence = false; action = parser_results-->ACTION_PRES; act_requester = nothing; if (actor ~= player) act_requester = player; inp1 = 0; inp2 = 0; multiflag = false; if (parser_results-->NO_INPS_PRES >= 1) { inp1 = parser_results-->INP1_PRES; if (inp1 == 0) multiflag = true; } if (parser_results-->NO_INPS_PRES >= 2) { inp2 = parser_results-->INP2_PRES; if (inp2 == 0) multiflag = true; } if (inp1 == 1) noun = nothing; else noun = inp1; if (inp2 == 1) second = nothing; else second = inp2; if (multiflag) { if (multiple_object-->0 == 0) { if (actor == player) { GENERATE_ACTION_RM('B'); new_line; } return; } if (toomany_flag) { toomany_flag = false; if (actor == player) { GENERATE_ACTION_RM('A'); } } i = multiple_object-->0; FollowRulebook(MULTIPLE_ACTION_PROCESSING_RB); if ((multiple_object-->0 == 1) && (i > 1)) { multiflag = false; if (inp1 == 0) noun = multiple_object-->1; if ((inp2 == 0) && (parser_results-->NO_INPS_PRES >= 2)) second = multiple_object-->1; } if (multiple_object-->0 == 0) rfalse; } if (multiflag) { GenerateMultipleActions(); multiflag = false; } else BeginAction(action, noun, second); if ((actor ~= player) || (act_requester)) action = ##Wait; actor = player; act_requester = 0; if (meta) { RulebookSucceeds(); rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Generate Multiple Actions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GenerateMultipleActions initial_location k item; initial_location = location; for (k=1: k<=multiple_object-->0: k++) { item = multiple_object-->k; RunParagraphOn(); if (inp1 == 0) { inp1 = item; BeginAction(action, item, second, item); inp1 = 0; } else { inp2 = item; BeginAction(action, noun, item, item); inp2 = 0; } if (deadflag) return; if (location ~= initial_location) { if (player == actor) { ACTION_PROCESSING_INTERNAL_RM('J'); new_line; } return; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Timed Events Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TIMED_EVENTS_R i d event_timer fire rule; for (i=1: i<=(TimedEventsTable-->0): i++) if ((rule=TimedEventsTable-->i) ~= 0) { event_timer = TimedEventTimesTable-->i; fire = false; if (event_timer<0) { (TimedEventTimesTable-->i)++; if (TimedEventTimesTable-->i == 0) fire = true; } else { d = (the_time - event_timer + TWENTY_FOUR_HOURS) % TWENTY_FOUR_HOURS; if ((d >= 0) && (d < 30)) fire = true; } if (fire) { TimedEventsTable-->i = 0; FollowRulebook(rule); } } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Setting Timed Events ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SetTimedEvent rule event_time absolute_time i b; for (i=1: i<=(TimedEventsTable-->0): i++) { if (rule == TimedEventsTable-->i) { b=i; break; } if ((b==0) && (TimedEventsTable-->i == 0)) b=i; } if (b==0) return RunTimeProblem(RTP_TOOMANYEVENTS); TimedEventsTable-->b = rule; if (absolute_time) TimedEventTimesTable-->b = event_time; else TimedEventTimesTable-->b = -event_time; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Setting Time Of Day ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global time_step; [ SetTime t s; the_time = t; time_rate = s; time_step = 0; if (s < 0) time_step = 0-s; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Advance Time Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ADVANCE_TIME_R; turns++; if (the_time ~= NULL) { if (time_rate >= 0) the_time = the_time+time_rate; else { time_step--; if (time_step == 0) { the_time++; time_step = -time_rate; } } the_time = the_time % TWENTY_FOUR_HOURS; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Note Object Acquisitions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NOTE_OBJECT_ACQUISITIONS_R obj; objectloop (obj in player) give obj moved; objectloop (obj has concealed) if (IndirectlyContains(player, obj)) give obj ~concealed; #Ifdef RUCKSACK_CLASS; objectloop (obj in player) if (obj ofclass RUCKSACK_CLASS) SACK_OBJECT = obj; objectloop (obj ofclass RUCKSACK_CLASS && obj provides component_parent && obj.component_parent == player) SACK_OBJECT = obj; #Endif; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Resurrect Player If Asked Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RESURRECT_PLAYER_IF_ASKED_R; if (resurrect_please) { RulebookSucceeds(); resurrect_please = false; deadflag = 0; story_complete = false; rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Ask The Final Question Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ASK_FINAL_QUESTION_R; print "^"; while (true) { CarryOutActivity(DEALING_WITH_FINAL_QUESTION_ACT); DivideParagraphPoint(); if (resurrect_please) rtrue; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Read The Final Answer Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ READ_FINAL_ANSWER_R; DrawStatusLine(); KeyboardPrimitive(buffer, parse); players_command = 100 + WordCount(); num_words = WordCount(); wn = 1; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Immediately Restart VM Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IMMEDIATELY_RESTART_VM_R; @restart; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Immediately Restore Saved Game Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IMMEDIATELY_RESTORE_SAVED_R; actor = player; RESTORE_THE_GAME_R(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Immediately Quit Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IMMEDIATELY_QUIT_R; @quit; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Immediately Undo Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IMMEDIATELY_UNDO_R; Perform_Undo(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Print Obituary Headline Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PRINT_OBITUARY_HEADLINE_R; print "^^ "; VM_Style(ALERT_VMSTY); print "***"; if (deadflag == 1) PRINT_OBITUARY_HEADLINE_RM('A'); if (deadflag == 2) PRINT_OBITUARY_HEADLINE_RM('B'); if (deadflag == 3) PRINT_OBITUARY_HEADLINE_RM('C'); if (deadflag ~= 0 or 1 or 2 or 3) { print " "; TEXT_TY_Say(deadflag); print " "; } print "***"; VM_Style(NORMAL_VMSTY); print "^^"; #Ifndef NO_SCORING; print "^"; #Endif; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Print Final Score Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PRINT_FINAL_SCORE_R; #Iftrue USE_SCORING ~= 0; ANNOUNCE_SCORE_R(); #Endif; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OrderOfPlay.i6t: Display Final Status Line Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DISPLAY_FINAL_STATUS_LINE_R; sline1 = score; sline2 = turns; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Properties ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant p3_list_grouping_key = list_together; Constant p4_printed_name = short_name; Constant p5_printed_plural_name = plural; Constant p6_indefinite_article = article; Constant p7_description = description; Constant p8_map_region = map_region; Constant p9_initial_appearance = initial; Constant p11_other_side = door_to; Constant p12_carrying_capacity = capacity; Constant p13_matching_key = with_key; Constant p15_plural_named = pluralname; Constant p17_proper_named = proper; Constant p19_ambiguously_plural = ambigpluralname; Constant p20_privately_named = privately_named; Constant p22_lighted = light; Constant p24_visited = visited; Constant p26_lit = light; Constant p28_edible = edible; Constant p30_fixed_in_place = static; Constant p32_scenery = scenery; Constant p33_wearable = clothing; Constant p34_pushable_between_rooms = pushable; Constant p35_handled = moved; Constant p37_undescribed = concealed; Constant p38_marked_for_listing = workflag; Constant p40_mentioned = mentioned; Constant p42_enterable = enterable; Constant p44_transparent = transparent; Constant p45_open = open; Constant p47_openable = openable; Constant p49_lockable = lockable; Constant p50_locked = locked; Constant p52_female = female; Constant p54_neuter = neuter; Constant p55_switched_on = on; Constant p60 = vector; Constant p61 = room_index; Constant p62 = door_dir; Constant p63 = door_to; Constant p64 = found_in; Constant p65 = absent; Constant p66 = cap_short_name; Constant p67 = mark_as_room; Constant p68 = mark_as_thing; Constant p69 = component_parent; Constant p70 = component_child; Constant p71 = component_sibling; Constant p72 = regional_found_in; Constant p73 = IK1_Count; Constant p74 = IK1_Link; Constant p75 = IK2_Count; Constant p76 = IK2_Link; Constant p77 = IK3_Count; Constant p78 = IK3_Link; Constant p79 = IK4_Count; Constant p80 = IK4_Link; Constant p81 = IK5_Count; Constant p82 = IK5_Link; Constant p83 = IK6_Count; Constant p84 = IK6_Link; Constant p85 = IK7_Count; Constant p86 = IK7_Link; Constant p87 = IK8_Count; Constant p88 = IK8_Link; Constant p89 = IK9_Count; Constant p90 = IK9_Link; Constant p91 = IK10_Count; Constant p92 = IK10_Link; Constant p93 = IK11_Count; Constant p94 = IK11_Link; Constant p95 = IK12_Count; Constant p96 = IK12_Link; Constant p97 = IK13_Count; Constant p98 = IK13_Link; Constant p99 = IK14_Count; Constant p100 = IK14_Link; Constant p101 = IK15_Count; Constant p102 = IK15_Link; Constant p103 = IK16_Count; Constant p104 = IK16_Link; Constant p105 = IK17_Count; Constant p106 = IK17_Link; Constant p107 = KD_Count; Constant p108 = name; Constant p109 = parse_name; Constant p110 = action_bitmap; Constant FBNA_PROP_NUMBER = p57_recurring; Object property_numberspace_forcer with p57_recurring false ; Array property_metadata --> ! offset 0: property p0_specification "specification" NULL ! offset 2: property p1_indefinite_appearance_tex "indefinite appearance text" NULL ! offset 4: property p2_variable_initial_value "variable initial value" K1_room K2_thing K3_direction K9_region NULL ! offset 10: property list_together "list grouping key" K1_room K2_thing K3_direction K9_region NULL ! offset 16: property short_name "printed name" K1_room K2_thing K3_direction K9_region NULL ! offset 22: property plural "printed plural name" K1_room K2_thing K3_direction K9_region NULL ! offset 28: property article "indefinite article" K1_room K2_thing K3_direction K9_region NULL ! offset 34: property description "description" K1_room K2_thing NULL ! offset 38: property map_region "map region" K1_room NULL ! offset 41: property initial "initial appearance" K2_thing NULL ! offset 44: property p10_opposite "opposite" K3_direction NULL ! offset 47: property door_to "other side" K4_door NULL ! offset 50: property capacity "carrying capacity" K5_container K6_supporter K8_person NULL ! offset 55: property with_key "matching key" K2_thing K4_door K5_container NULL ! offset 60: property p14_adaptive_text_viewpoint "adaptive text viewpoint" NULL ! offset 62: property pluralname "plural-named" K1_room K2_thing K3_direction K9_region NULL ! offset 68: property proper "proper-named" K1_room K2_thing K3_direction K9_region NULL ! offset 74: property ambigpluralname "ambiguously plural" K1_room K2_thing K3_direction K9_region NULL ! offset 80: property privately_named "privately-named" K1_room K2_thing K3_direction K9_region NULL ! offset 86: property light "lighted" K1_room K2_thing NULL ! offset 90: property visited "visited" K1_room NULL ! offset 93: property light "lit" K1_room K2_thing NULL ! offset 97: property edible "edible" K2_thing NULL ! offset 100: property static "fixed in place" K2_thing NULL ! offset 103: property scenery "scenery" K2_thing NULL ! offset 106: property clothing "wearable" K2_thing NULL ! offset 109: property pushable "pushable between rooms" K2_thing NULL ! offset 112: property moved "handled" K2_thing NULL ! offset 115: property concealed "undescribed" K2_thing NULL ! offset 118: property workflag "marked for listing" K2_thing K3_direction NULL ! offset 122: property mentioned "mentioned" K2_thing NULL ! offset 125: property enterable "enterable" K5_container K6_supporter NULL ! offset 129: property transparent "transparent" K5_container NULL ! offset 132: property open "open" K4_door K5_container NULL ! offset 136: property openable "openable" K4_door K5_container NULL ! offset 140: property lockable "lockable" K4_door K5_container NULL ! offset 144: property locked "locked" K4_door K5_container NULL ! offset 148: property female "female" K8_person NULL ! offset 151: property neuter "neuter" K8_person NULL ! offset 154: property on "switched on" K13_device NULL ! offset 157: property p57_recurring "recurring" NULL ! offset 159: property p59_unbolting_relation_stora "unbolting relation storage" K2_thing NULL ! offset 162: property vector "" NULL ! offset 164: property room_index "" NULL ! offset 166: property door_dir "" NULL ! offset 168: property door_to "" K4_door NULL ! offset 171: property found_in "" NULL ! offset 173: property absent "" NULL ! offset 175: property cap_short_name "" NULL ! offset 177: property mark_as_room "" NULL ! offset 179: property mark_as_thing "" NULL ! offset 181: property component_parent "" NULL ! offset 183: property component_child "" NULL ! offset 185: property component_sibling "" NULL ! offset 187: property regional_found_in "" NULL ! offset 189: property IK1_Count "" NULL ! offset 191: property IK1_Link "" NULL ! offset 193: property IK2_Count "" NULL ! offset 195: property IK2_Link "" NULL ! offset 197: property IK3_Count "" NULL ! offset 199: property IK3_Link "" NULL ! offset 201: property IK4_Count "" NULL ! offset 203: property IK4_Link "" NULL ! offset 205: property IK5_Count "" NULL ! offset 207: property IK5_Link "" NULL ! offset 209: property IK6_Count "" NULL ! offset 211: property IK6_Link "" NULL ! offset 213: property IK7_Count "" NULL ! offset 215: property IK7_Link "" NULL ! offset 217: property IK8_Count "" NULL ! offset 219: property IK8_Link "" NULL ! offset 221: property IK9_Count "" NULL ! offset 223: property IK9_Link "" NULL ! offset 225: property IK10_Count "" NULL ! offset 227: property IK10_Link "" NULL ! offset 229: property IK11_Count "" NULL ! offset 231: property IK11_Link "" NULL ! offset 233: property IK12_Count "" NULL ! offset 235: property IK12_Link "" NULL ! offset 237: property IK13_Count "" NULL ! offset 239: property IK13_Link "" NULL ! offset 241: property IK14_Count "" NULL ! offset 243: property IK14_Link "" NULL ! offset 245: property IK15_Count "" NULL ! offset 247: property IK15_Link "" NULL ! offset 249: property IK16_Count "" NULL ! offset 251: property IK16_Link "" NULL ! offset 253: property IK17_Count "" NULL ! offset 255: property IK17_Link "" NULL ! offset 257: property KD_Count "" NULL ! offset 259: property name "" NULL ! offset 261: property parse_name "" NULL ! offset 263: property action_bitmap "" NULL ; Constant attributed_property_offsets_SIZE 48; Array attributed_property_offsets --> attributed_property_offsets_SIZE; Constant valued_property_offsets_SIZE (100 + 111 + INDIV_PROP_START-48); Array valued_property_offsets --> valued_property_offsets_SIZE; [ CreatePropertyOffsets i ! loop counter ; for (i=0: ii = -1; for (i=0: ii = -1; valued_property_offsets-->p0_specification = 0; valued_property_offsets-->p1_indefinite_appearance_tex = 2; valued_property_offsets-->p2_variable_initial_value = 4; valued_property_offsets-->list_together = 10; valued_property_offsets-->short_name = 16; valued_property_offsets-->plural = 22; valued_property_offsets-->article = 28; valued_property_offsets-->description = 34; valued_property_offsets-->map_region = 38; valued_property_offsets-->initial = 41; valued_property_offsets-->p10_opposite = 44; valued_property_offsets-->door_to = 47; valued_property_offsets-->capacity = 50; valued_property_offsets-->with_key = 55; valued_property_offsets-->p14_adaptive_text_viewpoint = 60; attributed_property_offsets-->pluralname = 62; attributed_property_offsets-->proper = 68; attributed_property_offsets-->ambigpluralname = 74; attributed_property_offsets-->privately_named = 80; attributed_property_offsets-->light = 86; attributed_property_offsets-->visited = 90; attributed_property_offsets-->light = 93; attributed_property_offsets-->edible = 97; attributed_property_offsets-->static = 100; attributed_property_offsets-->scenery = 103; attributed_property_offsets-->clothing = 106; attributed_property_offsets-->pushable = 109; attributed_property_offsets-->moved = 112; attributed_property_offsets-->concealed = 115; attributed_property_offsets-->workflag = 118; attributed_property_offsets-->mentioned = 122; attributed_property_offsets-->enterable = 125; attributed_property_offsets-->transparent = 129; attributed_property_offsets-->open = 132; attributed_property_offsets-->openable = 136; attributed_property_offsets-->lockable = 140; attributed_property_offsets-->locked = 144; attributed_property_offsets-->female = 148; attributed_property_offsets-->neuter = 151; attributed_property_offsets-->on = 154; valued_property_offsets-->p57_recurring = 157; valued_property_offsets-->p59_unbolting_relation_stora = 159; valued_property_offsets-->vector = 162; valued_property_offsets-->room_index = 164; valued_property_offsets-->door_dir = 166; valued_property_offsets-->door_to = 168; valued_property_offsets-->found_in = 171; attributed_property_offsets-->absent = 173; valued_property_offsets-->cap_short_name = 175; attributed_property_offsets-->mark_as_room = 177; attributed_property_offsets-->mark_as_thing = 179; valued_property_offsets-->component_parent = 181; valued_property_offsets-->component_child = 183; valued_property_offsets-->component_sibling = 185; valued_property_offsets-->regional_found_in = 187; valued_property_offsets-->IK1_Count = 189; valued_property_offsets-->IK1_Link = 191; valued_property_offsets-->IK2_Count = 193; valued_property_offsets-->IK2_Link = 195; valued_property_offsets-->IK3_Count = 197; valued_property_offsets-->IK3_Link = 199; valued_property_offsets-->IK4_Count = 201; valued_property_offsets-->IK4_Link = 203; valued_property_offsets-->IK5_Count = 205; valued_property_offsets-->IK5_Link = 207; valued_property_offsets-->IK6_Count = 209; valued_property_offsets-->IK6_Link = 211; valued_property_offsets-->IK7_Count = 213; valued_property_offsets-->IK7_Link = 215; valued_property_offsets-->IK8_Count = 217; valued_property_offsets-->IK8_Link = 219; valued_property_offsets-->IK9_Count = 221; valued_property_offsets-->IK9_Link = 223; valued_property_offsets-->IK10_Count = 225; valued_property_offsets-->IK10_Link = 227; valued_property_offsets-->IK11_Count = 229; valued_property_offsets-->IK11_Link = 231; valued_property_offsets-->IK12_Count = 233; valued_property_offsets-->IK12_Link = 235; valued_property_offsets-->IK13_Count = 237; valued_property_offsets-->IK13_Link = 239; valued_property_offsets-->IK14_Count = 241; valued_property_offsets-->IK14_Link = 243; valued_property_offsets-->IK15_Count = 245; valued_property_offsets-->IK15_Link = 247; valued_property_offsets-->IK16_Count = 249; valued_property_offsets-->IK16_Link = 251; valued_property_offsets-->IK17_Count = 253; valued_property_offsets-->IK17_Link = 255; valued_property_offsets-->KD_Count = 257; valued_property_offsets-->name = 259; valued_property_offsets-->parse_name = 261; valued_property_offsets-->action_bitmap = 263; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Activities ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant NUMBER_RULEBOOKS_CREATED = 393; Constant V0_printing_the_name = 0; Constant V1_printing_the_plural_name = 1; Constant V2_printing_a_number = 2; Constant V3_printing_room_description = 3; Constant V4_printing_inventory_detail = 4; Constant V5_listing_contents = 5; Constant V6_grouping_together = 6; Constant V7_writing_a_paragraph_about = 7; Constant V8_listing_nondescript_items = 8; Constant V9_printing_the_name_of_a_da = 9; Constant V10_printing_the_description = 10; Constant V11_printing_the_announcemen = 11; Constant V12_printing_the_announcemen = 12; Constant V13_printing_a_refusal_to_ac = 13; Constant V14_constructing_the_status_ = 14; Constant V15_printing_the_banner_text = 15; Constant V16_reading_a_command = 16; Constant V17_deciding_the_scope = 17; Constant V18_deciding_the_concealed_p = 18; Constant V19_deciding_whether_all_inc = 19; Constant V20_clarifying_the_parser_s_ = 20; Constant V21_asking_which_do_you_mean = 21; Constant V22_printing_a_parser_error = 22; Constant V23_supplying_a_missing_noun = 23; Constant V24_supplying_a_missing_seco = 24; Constant V25_implicitly_taking = 25; Constant V26_starting_the_virtual_mac = 26; Constant V27_amusing_a_victorious_pla = 27; Constant V28_printing_the_player_s_ob = 28; Constant V29_handling_the_final_quest = 29; Constant V30_printing_the_locale_desc = 30; Constant V31_choosing_notable_locale_ = 31; Constant V32_printing_a_locale_paragr = 32; Constant V33_issuing_the_response_tex = 33; Constant V34_pausing_the_game = 34; Constant V35_refusing_keys = 35; Array Activity_before_rulebooks --> 29 32 35 38 41 44 47 50 53 56 59 62 65 68 71 74 77 80 83 86 89 92 95 98 101 104 107 110 113 116 119 122 125 128 362 365 NULL; Array Activity_for_rulebooks --> 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 363 366 NULL; Array Activity_after_rulebooks --> 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 103 106 109 112 115 118 121 124 127 130 364 367 NULL; Array Activity_atb_rulebooks -> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 $ff; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RELS_SYMMETRIC $8000; Constant RELS_EQUIVALENCE $4000; Constant RELS_X_UNIQUE $2000; Constant RELS_Y_UNIQUE $1000; Constant RELS_TEST $0800; Constant RELS_ASSERT_TRUE $0400; Constant RELS_ASSERT_FALSE $0200; Constant RELS_SHOW $0100; Constant RELS_ROUTE_FIND $0080; Constant RELS_ROUTE_FIND_COUNT $0040; Constant RELS_LOOKUP_ANY $0008; Constant RELS_LOOKUP_ALL_X $0004; Constant RELS_LOOKUP_ALL_Y $0002; Constant RELS_LIST $0001; #Iftrue (WORDSIZE == 2); Constant REL_BLOCK_HEADER ($100*5 + $$1101); #Ifnot; Constant REL_BLOCK_HEADER ($100*6 + $$1101)*$10000; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Printing Routines ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintSceneName value ! Implied call parameter ; switch(value) { I78_entire_game: print "Entire Game"; I127_mystery: print "Mystery"; I167_discovery: print "Discovery"; default: print ""; } ]; [ A_PrintSceneName value ! Implied call parameter ; return (value % 3)+1; ]; [ B_PrintSceneName value ! Implied call parameter ; return ((value+1) % 3)+1; ]; [ R_PrintSceneName a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(3)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintFigureName value ! Implied call parameter ; switch(value) { I77_figure_of_cover: print "Figure of cover"; default: print ""; } ]; [ A_PrintFigureName value ! Implied call parameter ; return (value % 1)+1; ]; [ B_PrintFigureName value ! Implied call parameter ; return ((value+-1) % 1)+1; ]; [ R_PrintFigureName a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(1)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintSoundName value ! Implied call parameter ; switch(value) { default: print ""; } ]; [ A_PrintSoundName value ! Implied call parameter ; return (value % 0)+1; ]; [ B_PrintSoundName value ! Implied call parameter ; return ((value+-2) % 0)+1; ]; [ R_PrintSoundName a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(0)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintExternalFileName value ! Implied call parameter ; switch(value) { default: print ""; } ]; [ A_PrintExternalFileName value ! Implied call parameter ; return (value % 0)+1; ]; [ B_PrintExternalFileName value ! Implied call parameter ; return ((value+-2) % 0)+1; ]; [ R_PrintExternalFileName a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(0)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ E61 value ! Implied call parameter ; switch(value) { I71_english_language: print "English language"; I72_french_language: print "French language"; I73_german_language: print "German language"; I74_italian_language: print "Italian language"; I75_spanish_language: print "Spanish language"; I76_swedish_language: print "Swedish language"; default: print ""; } ]; [ A_E61 value ! Implied call parameter ; return (value % 6)+1; ]; [ B_E61 value ! Implied call parameter ; return ((value+4) % 6)+1; ]; [ R_E61 a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(6)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ E62 value ! Implied call parameter ; switch(value) { I80_didn_t_understand_error: print "didn't understand error"; I81_only_understood_as_far_a: print "only understood as far as error"; I82_didn_t_understand_that_n: print "didn't understand that number error"; I83_can_only_do_that_to_some: print "can only do that to something animate error"; I84_can_t_see_any_such_thing: print "can't see any such thing error"; I85_said_too_little_error: print "said too little error"; I86_aren_t_holding_that_erro: print "aren't holding that error"; I87_can_t_use_multiple_objec: print "can't use multiple objects error"; I88_can_only_use_multiple_ob: print "can only use multiple objects error"; I89_not_sure_what_it_refers_: print "not sure what it refers to error"; I90_excepted_something_not_i: print "excepted something not included error"; I91_not_a_verb_i_recognise_e: print "not a verb I recognise error"; I92_not_something_you_need_t: print "not something you need to refer to error"; I93_can_t_see_it_at_the_mome: print "can't see it at the moment error"; I94_didn_t_understand_the_wa: print "didn't understand the way that finished error"; I95_not_enough_of_those_avai: print "not enough of those available error"; I96_nothing_to_do_error: print "nothing to do error"; I97_noun_did_not_make_sense_: print "noun did not make sense in that context error"; I98_referred_to_a_determinat: print "referred to a determination of scope error"; I99_i_beg_your_pardon_error: print "I beg your pardon error"; I100_can_t_again_the_address: print "can't again the addressee error"; I101_comma_can_t_begin_error: print "comma can't begin error"; I102_can_t_see_whom_to_talk_: print "can't see whom to talk to error"; I103_can_t_talk_to_inanimate: print "can't talk to inanimate things error"; I104_didn_t_understand_addre: print "didn't understand addressee's last name error"; default: print ""; } ]; [ A_E62 value ! Implied call parameter ; return (value % 25)+1; ]; [ B_E62 value ! Implied call parameter ; return ((value+23) % 25)+1; ]; [ R_E62 a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(25)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ E63 value ! Implied call parameter ; switch(value) { I106_present_tense: print "present tense"; I107_past_tense: print "past tense"; I108_perfect_tense: print "perfect tense"; I109_past_perfect_tense: print "past perfect tense"; I110_future_tense: print "future tense"; default: print ""; } ]; [ A_E63 value ! Implied call parameter ; return (value % 5)+1; ]; [ B_E63 value ! Implied call parameter ; return ((value+3) % 5)+1; ]; [ R_E63 a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(5)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ E64 value ! Implied call parameter ; switch(value) { I112_first_person_singular: print "first person singular"; I113_second_person_singular: print "second person singular"; I114_third_person_singular: print "third person singular"; I115_first_person_plural: print "first person plural"; I116_second_person_plural: print "second person plural"; I117_third_person_plural: print "third person plural"; default: print ""; } ]; [ A_E64 value ! Implied call parameter ; return (value % 6)+1; ]; [ B_E64 value ! Implied call parameter ; return ((value+4) % 6)+1; ]; [ R_E64 a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(6)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ E65 value ! Implied call parameter ; switch(value) { I119_nominative: print "nominative"; I120_accusative: print "accusative"; default: print ""; } ]; [ A_E65 value ! Implied call parameter ; return (value % 2)+1; ]; [ B_E65 value ! Implied call parameter ; return ((value+0) % 2)+1; ]; [ R_E65 a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(2)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ E66 value ! Implied call parameter ; switch(value) { I122_neuter_gender: print "neuter gender"; I123_masculine_gender: print "masculine gender"; I124_feminine_gender: print "feminine gender"; default: print ""; } ]; [ A_E66 value ! Implied call parameter ; return (value % 3)+1; ]; [ B_E66 value ! Implied call parameter ; return ((value+1) % 3)+1; ]; [ R_E66 a ! Implied call parameter b ! Implied call parameter ; if (a == 0 && b == 0) return (random(3)); if (a == b) return b; if (a > b) return b+(random(MAX_POSITIVE_NUMBER) % (a-b+1)); return a+(random(MAX_POSITIVE_NUMBER) % (b-a+1)); ]; [ PrintKindValuePair k ! Implied call parameter v ! Implied call parameter ; k = KindAtomic(k); switch(k) { 2: print (DA_Number) v; 3: print (DA_Number) v; 4: print (DA_Number) v; 5: print (DA_Number) v; 6: print (DA_Number) v; 7: print (DA_Number) v; 8: print (DA_Number) v; 9: print (DA_Number) v; 10: print (PrintShortName) v; 11: print (DecimalNumber) v; 12: print (REAL_NUMBER_TY_Say) v; 13: print (DA_TruthState) v; 14: print (TEXT_TY_Say) v; 15: print (DecimalNumber) v; 16: print (PrintUseOption) v; 17: print (PrintResponse) v; 18: print (PrintVerbAsValue) v; 19: print (PrintSnippet) v; 20: print (PrintTableName) v; 21: print (DA_Number) v; 22: print (RulebookOutcomePrintingRule) v; 23: print (DecimalNumber) v; 25: print (DecimalNumber) v; 27: print (SayPhraseName) v; 28: print (DecimalNumber) v; 29: print (DecimalNumber) v; 30: print (RELATION_TY_Say) v; 31: print (RulePrintingRule) v; 32: print (RulePrintingRule) v; 33: print (DecimalNumber) v; 34: print (LIST_OF_TY_Say) v; 35: print (DecimalNumber) v; 36: print (PROPERTY_TY_Say) v; 37: print (DecimalNumber) v; 38: print (COMBINATION_TY_Say) v; 39: print (DecimalNumber) v; 40: print (STORED_ACTION_TY_Say) v; 41: print (SayActionName) v; 42: print (PrintTimeOfDay) v; 43: print (PrintSceneName) v; 44: print (PrintFigureName) v; 45: print (PrintSoundName) v; 46: print (PrintExternalFileName) v; 47: print (E61) v; 48: print (E62) v; 49: print (E63) v; 50: print (E64) v; 51: print (E65) v; 52: print (E66) v; default: print v; } ]; [ DefaultValueOfKOV sk ! Implied call parameter k ! weak kind ID ; k = KindAtomic(sk); switch(k) { 10: return nothing; 11: return 0; 12: return 0; 13: return false; 14: return BlkValueCreate(sk); 15: return 32; 16: return 0; 17: return 0; 18: return ConjugateVerb_0; 19: return 101; 20: return TheEmptyTable; 21: return 0; 22: return RBNO_0; 23: return DefaultTopic; 25: return ; 34: return BlkValueCreate(sk); 39: return ; 40: return BlkValueCreate(sk); 41: return ##Wait; 42: return 540; 43: return I78_entire_game; 44: return I77_figure_of_cover; 45: return ; 46: return ; 47: return I71_english_language; 48: return I80_didn_t_understand_error; 49: return I106_present_tense; 50: return I112_first_person_singular; 51: return I119_nominative; 52: return I122_neuter_gender; default: return 0; } ]; [ KOVComparisonFunction k ! Implied call parameter ; k = KindAtomic(k); switch(k) { 10: return UnsignedCompare; 12: return REAL_NUMBER_TY_Compare; 13: return UnsignedCompare; 14: return BlkValueCompare; 15: return UnsignedCompare; 16: return UnsignedCompare; 17: return UnsignedCompare; 18: return UnsignedCompare; 19: return UnsignedCompare; 20: return UnsignedCompare; 21: return UnsignedCompare; 22: return UnsignedCompare; 23: return UnsignedCompare; 25: return UnsignedCompare; 34: return BlkValueCompare; 39: return UnsignedCompare; 40: return BlkValueCompare; 41: return UnsignedCompare; 43: return UnsignedCompare; 44: return UnsignedCompare; 45: return UnsignedCompare; 46: return UnsignedCompare; default: return 0; } ]; [ KOVDomainSize k ! Implied call parameter ; k = KindAtomic(k); switch(k) { 43: return 3; 44: return 1; 45: return 0; 46: return 0; 47: return 6; 48: return 25; 49: return 5; 50: return 6; 51: return 2; 52: return 3; default: return 0; } ]; [ KOVIsBlockValue k ! Implied call parameter ; k = KindAtomic(k); if (k == 14 or 30 or 34 or 38 or 40) rtrue; rfalse; ]; [ KOVSupportFunction k ! Implied call parameter fail ! Implied call parameter ; k = KindAtomic(k); switch(k) { 14: return TEXT_TY_Support; 30: return RELATION_TY_Support; 34: return LIST_OF_TY_Support; 38: return COMBINATION_TY_Support; 40: return STORED_ACTION_TY_Support; } if (fail) BlkValueError(fail); rfalse; ]; [ I7_Kind_Name k ! Implied call parameter ; if (k == K1_room) print "room"; if (k == K2_thing) print "thing"; if (k == K3_direction) print "direction"; if (k == K4_door) print "door"; if (k == K5_container) print "container"; if (k == K6_supporter) print "supporter"; if (k == K7_backdrop) print "backdrop"; if (k == K8_person) print "person"; if (k == K9_region) print "region"; if (k == K10_man) print "man"; if (k == K11_woman) print "woman"; if (k == K12_animal) print "animal"; if (k == K13_device) print "device"; if (k == K14_vehicle) print "vehicle"; if (k == K15_player_s_holdall) print "player's holdall"; if (k == K16_passkey) print "passkey"; if (k == K17_keychain) print "keychain"; ]; Constant RBNO_0 = "allow access"; Constant RBNO_1 = "deny access"; Constant RBNO_2 = "there is sufficient light"; Constant RBNO_3 = "there is insufficient light"; Constant RBNO_4 = "persuasion succeeds"; Constant RBNO_5 = "persuasion fails"; Constant RBNO_6 = "it is very likely"; Constant RBNO_7 = "it is likely"; Constant RBNO_8 = "it is possible"; Constant RBNO_9 = "it is unlikely"; Constant RBNO_10 = "it is very unlikely"; Constant RBNO_11 = "it does not"; Constant RBNO_12 = "it does"; [ RulebookOutcomePrintingRule rbno ! Implied call parameter ; if (rbno == 0) print "(no outcome)"; else print (string) rbno; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Object Tree ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array KindHierarchy --> K0_kind (0) K1_room (0) K2_thing (0) K3_direction (0) K4_door (2) K5_container (2) K6_supporter (2) K7_backdrop (2) K8_person (2) K9_region (0) K10_man (8) K11_woman (8) K12_animal (8) K13_device (2) K14_vehicle (5) K15_player_s_holdall (5) K16_passkey (2) K17_keychain (6) ; Constant IK1_First = I128_mysterious_room; Constant IK2_First = selfobj; Constant IK3_First = I51_north; Constant IK4_First = I130_beige_door; Constant IK5_First = I144_velvet_compartment; Constant IK6_First = I153_block_of_ice; Constant IK7_First = nothing; Constant IK8_First = selfobj; Constant IK9_First = nothing; Constant IK10_First = I182_agent; Constant IK11_First = nothing; Constant IK12_First = nothing; Constant IK13_First = nothing; Constant IK14_First = nothing; Constant IK15_First = nothing; Constant IK16_First = nothing; Constant IK17_First = nothing; Constant No_Directions = 12; ! Table of direction object alias constants: Constant DirectionObject_0 = I51_north; Constant DirectionObject_1 = I52_northeast; Constant DirectionObject_2 = I53_northwest; Constant DirectionObject_3 = I54_south; Constant DirectionObject_4 = I55_southeast; Constant DirectionObject_5 = I56_southwest; Constant DirectionObject_6 = I57_east; Constant DirectionObject_7 = I58_west; Constant DirectionObject_8 = I59_up; Constant DirectionObject_9 = I60_down; Constant DirectionObject_10 = in_obj; Constant DirectionObject_11 = out_obj; Array Map_Storage --> I130_beige_door 0 0 0 0 0 0 0 0 0 0 I168_testing_area ! Exits from: I128_mysterious_room 0 0 0 0 0 0 0 0 I174_first_staircase 0 I128_mysterious_room 0 ! Exits from: I168_testing_area 0 0 0 0 0 0 0 0 I178_second_staircase 0 0 0 ! Exits from: I176_lower_landing I180_steel_door 0 0 0 0 0 0 0 0 I178_second_staircase 0 0 ! Exits from: I179_upper_landing 0 0 0 0 0 0 0 I184_wooden_door 0 0 0 0 ! Exits from: I181_observation_room ; Class VPH_Class; Array KOV_representatives --> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ValuePropertyHolder_43 0 0 0 ValuePropertyHolder_47 0 0 0 0 0 ; VPH_Class ValuePropertyHolder_43 with value_range 3 with p57_recurring KOVP_43_P57 with description KOVP_43_P7 ; ! Storage for property p57_recurring of kind SCENE_TY Array KOVP_43_P57 table 0 0 (true) (false) (false) ; ! Storage for property description of kind SCENE_TY Array KOVP_43_P7 table 0 0 (BC_3) (BC_4) (BC_5) ; VPH_Class ValuePropertyHolder_47 with value_range 6 with p14_adaptive_text_viewpoint KOVP_47_P14 ; ! Storage for property p14_adaptive_text_viewpoint of kind Array KOVP_47_P14 table 0 0 (I115_first_person_plural) (I112_first_person_singular) (I112_first_person_singular) (I112_first_person_singular) (I112_first_person_singular) (I112_first_person_singular) ; Class K0_kind has ~pluralname has ~proper with list_together BC_6 with short_name BC_7 with plural BC_8 with article BC_9 has ~ambigpluralname ; Class K1_room class K0_kind with description BC_10 with map_region nothing has ~privately_named has light has ~visited with list_together BC_11 with short_name BC_12 with plural BC_13 with article BC_14 ; Class K2_thing class K0_kind has ~privately_named has ~light has ~edible has ~static has ~concealed has ~workflag has mentioned with component_parent nothing with component_child nothing with component_sibling nothing with action_bitmap 0 0 0 0 0 0 has ~scenery has ~clothing has ~pushable has ~moved with description BC_15 with initial BC_16 with with_key nothing with p59_unbolting_relation_stora nothing with list_together BC_17 with short_name BC_18 with plural BC_19 with article BC_20 ; Class K6_supporter class K2_thing has transparent supporter with plural BC_21 with capacity 100 has static has ~enterable with description BC_22 with initial BC_23 with list_together BC_24 with short_name BC_25 with article BC_26 ; Class K17_keychain class K6_supporter with plural BC_27 has ~static with description BC_28 with initial BC_29 with list_together BC_30 with short_name BC_31 with article BC_32 ; Class K8_person class K2_thing has transparent animate with before NULL, with plural BC_33 with capacity 100 has ~female has ~neuter with description BC_34 with initial BC_35 with list_together BC_36 with short_name BC_37 with article BC_38 ; Class K10_man class K8_person with plural BC_39 has ~female has ~neuter with description BC_40 with initial BC_41 with list_together BC_42 with short_name BC_43 with article BC_44 ; Class K11_woman class K8_person with plural BC_45 has female has ~neuter with description BC_46 with initial BC_47 with list_together BC_48 with short_name BC_49 with article BC_50 ; Class K12_animal class K8_person with plural BC_51 with description BC_52 with initial BC_53 with list_together BC_54 with short_name BC_55 with article BC_56 ; Class K4_door class K2_thing has door, with plural BC_57 has static has ~pushable has ~open has openable has ~lockable has ~locked with door_to nothing with with_key nothing with description BC_58 with initial BC_59 with list_together BC_60 with short_name BC_61 with article BC_62 ; Class K5_container class K2_thing has container, with plural BC_63 with capacity 100 has ~transparent has open has ~openable has ~lockable has ~locked has ~enterable with with_key nothing with description BC_64 with initial BC_65 with list_together BC_66 with short_name BC_67 with article BC_68 ; Class K14_vehicle class K5_container with plural BC_69 has static has enterable with description BC_70 with initial BC_71 with list_together BC_72 with short_name BC_73 with article BC_74 ; Class K15_player_s_holdall class K5_container with plural BC_75 has ~static has openable with description BC_76 with initial BC_77 with list_together BC_78 with short_name BC_79 with article BC_80 ; Class K7_backdrop class K2_thing with plural BC_81 has static has scenery has ~pushable with description BC_82 with initial BC_83 with list_together BC_84 with short_name BC_85 with article BC_86 ; Class K13_device class K2_thing has switchable, with plural BC_87 has ~on with description BC_88 with initial BC_89 with list_together BC_90 with short_name BC_91 with article BC_92 ; Class K16_passkey class K2_thing with plural BC_93 with description BC_94 with initial BC_95 with list_together BC_96 with short_name BC_97 with article BC_98 ; Class K9_region class K0_kind with plural BC_99 has ~privately_named with list_together BC_100 with short_name BC_101 with article BC_102 ; Class K3_direction class K0_kind has scenery, ! class CompassDirection, with plural BC_103 has ~privately_named has ~workflag with p10_opposite I51_north with list_together BC_104 with short_name BC_105 with article BC_106 ; Object I51_north "" Compass class K3_direction with short_name BC_107 with article BC_108 with p10_opposite I54_south with vector 0 with IK3_Count 0 with IK3_Link I52_northeast with KD_Count 3 with name 'north' 'directions//p' 'n//' with parse_name Parse_Name_GV1 with action_bitmap 0 0 0 0 0 0 with list_together BC_109 with plural BC_110 ; Object I52_northeast "" Compass class K3_direction with short_name BC_111 with article BC_112 with p10_opposite I56_southwest with vector 0 with IK3_Count 1 with IK3_Link I53_northwest with KD_Count 3 with name 'northeast' 'directions//p' 'ne' with parse_name Parse_Name_GV2 with action_bitmap 0 0 0 0 0 0 with list_together BC_113 with plural BC_114 ; Object I53_northwest "" Compass class K3_direction with short_name BC_115 with article BC_116 with p10_opposite I55_southeast with vector 0 with IK3_Count 2 with IK3_Link I54_south with KD_Count 3 with name 'northwest' 'directions//p' 'nw' with parse_name Parse_Name_GV3 with action_bitmap 0 0 0 0 0 0 with list_together BC_117 with plural BC_118 ; Object I54_south "" Compass class K3_direction with short_name BC_119 with article BC_120 with p10_opposite I51_north with vector 0 with IK3_Count 3 with IK3_Link I55_southeast with KD_Count 3 with name 'south' 'directions//p' 's//' with parse_name Parse_Name_GV4 with action_bitmap 0 0 0 0 0 0 with list_together BC_121 with plural BC_122 ; Object I55_southeast "" Compass class K3_direction with short_name BC_123 with article BC_124 with p10_opposite I53_northwest with vector 0 with IK3_Count 4 with IK3_Link I56_southwest with KD_Count 3 with name 'southeast' 'directions//p' 'se' with parse_name Parse_Name_GV5 with action_bitmap 0 0 0 0 0 0 with list_together BC_125 with plural BC_126 ; Object I56_southwest "" Compass class K3_direction with short_name BC_127 with article BC_128 with p10_opposite I52_northeast with vector 0 with IK3_Count 5 with IK3_Link I57_east with KD_Count 3 with name 'southwest' 'directions//p' 'sw' with parse_name Parse_Name_GV6 with action_bitmap 0 0 0 0 0 0 with list_together BC_129 with plural BC_130 ; Object I57_east "" Compass class K3_direction with short_name BC_131 with article BC_132 with p10_opposite I58_west with vector 0 with IK3_Count 6 with IK3_Link I58_west with KD_Count 3 with name 'east' 'directions//p' 'e//' with parse_name Parse_Name_GV7 with action_bitmap 0 0 0 0 0 0 with list_together BC_133 with plural BC_134 ; Object I58_west "" Compass class K3_direction with short_name BC_135 with article BC_136 with p10_opposite I57_east with vector 0 with IK3_Count 7 with IK3_Link I59_up with KD_Count 3 with name 'west' 'directions//p' 'w//' with parse_name Parse_Name_GV8 with action_bitmap 0 0 0 0 0 0 with list_together BC_137 with plural BC_138 ; Object I59_up "" Compass class K3_direction with short_name BC_139 with article BC_140 with p10_opposite I60_down with vector 0 with IK3_Count 8 with IK3_Link I60_down with KD_Count 3 with name 'up' 'directions//p' 'u//' with parse_name Parse_Name_GV9 with action_bitmap 0 0 0 0 0 0 with list_together BC_141 with plural BC_142 ; Object I60_down "" Compass class K3_direction with short_name BC_143 with article BC_144 with p10_opposite I59_up with vector 0 with IK3_Count 9 with IK3_Link in_obj with KD_Count 3 with name 'down' 'directions//p' 'd//' with parse_name Parse_Name_GV10 with action_bitmap 0 0 0 0 0 0 with list_together BC_145 with plural BC_146 ; Object in_obj "" Compass class K3_direction with short_name BC_147 with article BC_148 with p10_opposite out_obj with vector 0 with IK3_Count 10 with IK3_Link out_obj with KD_Count 3 with name 'inside' 'directions//p' 'in' with parse_name Parse_Name_GV11 with action_bitmap 0 0 0 0 0 0 with list_together BC_149 with plural BC_150 ; Object out_obj "" Compass class K3_direction with short_name BC_151 with article BC_152 with p10_opposite in_obj with vector 0 with IK3_Count 11 with IK3_Link nothing with KD_Count 3 with name 'outside' 'directions//p' 'out' with parse_name Parse_Name_GV12 with action_bitmap 0 0 0 0 0 0 with list_together BC_153 with plural BC_154 ; Object selfobj "" class K8_person with saved_short_name TX_L_33, with short_name BC_155 with description BC_156 has proper has privately_named has concealed with vector 0 with cap_short_name BC_157 has mark_as_thing with IK2_Count 0 with IK2_Link I129_halogen_lamp with IK8_Count 0 with IK8_Link I182_agent with KD_Count 8 with parse_name Parse_Name_GV13 with action_bitmap 0 0 0 0 0 0 with initial BC_158 with list_together BC_159 with plural BC_160 with article BC_161 ; Object I128_mysterious_room "" class K1_room with short_name BC_162 with description BC_163 has proper with vector 0 with room_index -1 has mark_as_room with IK1_Count 0 with IK1_Link I168_testing_area with KD_Count 1 with name 'mysterious' 'room' 'rooms//p' with list_together BC_164 with plural BC_165 with article BC_166 ; Object -> I129_halogen_lamp "" class K2_thing with short_name BC_167 with description BC_168 has static has scenery with vector 0 has mark_as_thing with IK2_Count 1 with IK2_Link I130_beige_door with KD_Count 2 with name 'halogen' 'lamp' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_169 with list_together BC_170 with plural BC_171 with article BC_172 ; Object -> I130_beige_door "" class K4_door with short_name BC_173 with description BC_174 with door_to I128_mysterious_room with with_key I131_thin_key has lockable has locked with vector 0 with door_dir I51_north has mark_as_thing with IK2_Count 2 with IK2_Link I166_wall with IK4_Count 0 with IK4_Link I174_first_staircase with KD_Count 4 with name 'beige' 'door' 'doors//p' with action_bitmap 0 0 0 0 0 0 with initial BC_175 with list_together BC_176 with plural BC_177 with article BC_178 ; Object -> I166_wall "" class K2_thing with short_name BC_179 with description BC_180 has static has scenery with vector 0 has mark_as_thing with IK2_Count 38 with IK2_Link I131_thin_key with KD_Count 2 with name 'wall' 'things//p' 'walls' with parse_name Parse_Name_GV104 with action_bitmap 0 0 0 0 0 0 with initial BC_181 with list_together BC_182 with plural BC_183 with article BC_184 ; Object I131_thin_key "" class K2_thing with short_name BC_185 with description BC_186 with vector 0 has mark_as_thing with IK2_Count 3 with IK2_Link I132_note with KD_Count 2 with name 'thin' 'key' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_187 with list_together BC_188 with plural BC_189 with article BC_190 ; Object I132_note "" class K2_thing with short_name BC_191 with description BC_192 with vector 0 has mark_as_thing with IK2_Count 4 with IK2_Link I133_paper with KD_Count 2 with name 'note' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_193 with list_together BC_194 with plural BC_195 with article BC_196 ; Object I133_paper "" class K2_thing with short_name BC_197 with description BC_198 with vector 0 has mark_as_thing with IK2_Count 5 with IK2_Link I134_journal with KD_Count 2 with name 'paper' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_199 with list_together BC_200 with plural BC_201 with article BC_202 ; Object I134_journal "" class K2_thing with short_name BC_203 with description BC_204 with vector 0 has mark_as_thing with IK2_Count 6 with IK2_Link I135_diagram with KD_Count 2 with name 'journal' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_205 with list_together BC_206 with plural BC_207 with article BC_208 ; Object I135_diagram "" class K2_thing with short_name BC_209 with description BC_210 with vector 0 has mark_as_thing with IK2_Count 7 with IK2_Link I136_book with KD_Count 2 with name 'diagram' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_211 with list_together BC_212 with plural BC_213 with article BC_214 ; Object I136_book "" class K2_thing with short_name BC_215 with description BC_216 with vector 0 has mark_as_thing with IK2_Count 8 with IK2_Link I137_torn_report with KD_Count 2 with name 'book' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_217 with list_together BC_218 with plural BC_219 with article BC_220 ; Object I137_torn_report "" class K2_thing with short_name BC_221 with description BC_222 with vector 0 has mark_as_thing with IK2_Count 9 with IK2_Link I138_letter with KD_Count 2 with name 'torn' 'report' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_223 with list_together BC_224 with plural BC_225 with article BC_226 ; Object I138_letter "" class K2_thing with short_name BC_227 with description BC_228 with vector 0 has mark_as_thing with IK2_Count 10 with IK2_Link I139_scroll with KD_Count 2 with name 'letter' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_229 with list_together BC_230 with plural BC_231 with article BC_232 ; Object I139_scroll "" class K2_thing with short_name BC_233 with description BC_234 with vector 0 has mark_as_thing with IK2_Count 11 with IK2_Link I140_memo with KD_Count 2 with name 'scroll' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_235 with list_together BC_236 with plural BC_237 with article BC_238 ; Object I140_memo "" class K2_thing with short_name BC_239 with description BC_240 with vector 0 has mark_as_thing with IK2_Count 12 with IK2_Link I141_footnote with KD_Count 2 with name 'memo' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_241 with list_together BC_242 with plural BC_243 with article BC_244 ; Object I141_footnote "" class K2_thing with short_name BC_245 with description BC_246 with vector 0 has mark_as_thing with IK2_Count 13 with IK2_Link I142_strange_machine with KD_Count 2 with name 'footnote' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_247 with list_together BC_248 with plural BC_249 with article BC_250 ; Object I142_strange_machine "" class K2_thing with short_name BC_251 with description BC_252 has static with vector 0 has mark_as_thing with component_child I143_button with IK2_Count 14 with IK2_Link I143_button with KD_Count 2 with name 'strange' 'machine' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_253 with list_together BC_254 with plural BC_255 with article BC_256 ; Object I143_button "" class K2_thing with short_name BC_257 with article BC_258 with description BC_259 with vector 0 has mark_as_thing with component_parent I142_strange_machine with component_sibling I144_velvet_compartment with IK2_Count 15 with IK2_Link I144_velvet_compartment with KD_Count 2 with name 'button' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_260 with list_together BC_261 with plural BC_262 ; Object I144_velvet_compartment "" class K5_container with short_name BC_263 with article BC_264 with description BC_265 with capacity 1 has static has transparent has open has ~openable with vector 0 has mark_as_thing with component_parent I142_strange_machine with component_sibling I145_slot with IK2_Count 16 with IK2_Link I145_slot with IK5_Count 0 with IK5_Link I159_drawer with KD_Count 5 with name 'velvet' 'compartment' 'containers//p' with action_bitmap 0 0 0 0 0 0 with initial BC_266 with list_together BC_267 with plural BC_268 ; Object I145_slot "" class K2_thing with short_name BC_269 with article BC_270 with description BC_271 with vector 0 has mark_as_thing with component_parent I142_strange_machine with IK2_Count 17 with IK2_Link I146_wide_key with KD_Count 2 with name 'slot' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_272 with list_together BC_273 with plural BC_274 ; Object I146_wide_key "" class K2_thing with short_name BC_275 with description BC_276 with vector 0 has mark_as_thing with IK2_Count 18 with IK2_Link I147_electronic_keypad with KD_Count 2 with name 'wide' 'key' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_277 with list_together BC_278 with plural BC_279 with article BC_280 ; Object I147_electronic_keypad "" class K2_thing with short_name BC_281 with description BC_282 has static with vector 0 has mark_as_thing with IK2_Count 19 with IK2_Link I148_printed_slip with KD_Count 2 with name 'electronic' 'keypad' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_283 with list_together BC_284 with plural BC_285 with article BC_286 ; Object I148_printed_slip "" class K2_thing with short_name BC_287 with description BC_288 with vector 0 has mark_as_thing with IK2_Count 20 with IK2_Link I149_pair_of_lights with KD_Count 2 with name 'printed' 'slip' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_289 with list_together BC_290 with plural BC_291 with article BC_292 ; Object I149_pair_of_lights "" class K2_thing with short_name BC_293 with description BC_294 has static with vector 0 has mark_as_thing with component_child I150_left_switch with IK2_Count 21 with IK2_Link I150_left_switch with KD_Count 2 with name 'pair' 'of' 'lights' 'things//p' 'bulbs' 'bulb' with parse_name Parse_Name_GV97 with action_bitmap 0 0 0 0 0 0 with initial BC_295 with list_together BC_296 with plural BC_297 with article BC_298 ; Object I150_left_switch "" class K2_thing with short_name BC_299 with article BC_300 with description BC_301 with vector 0 has mark_as_thing with component_parent I149_pair_of_lights with component_sibling I151_right_switch with IK2_Count 22 with IK2_Link I151_right_switch with KD_Count 2 with name 'left' 'switch' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_302 with list_together BC_303 with plural BC_304 ; Object I151_right_switch "" class K2_thing with short_name BC_305 with article BC_306 with description BC_307 with vector 0 has mark_as_thing with component_parent I149_pair_of_lights with component_sibling I152_label with IK2_Count 23 with IK2_Link I152_label with KD_Count 2 with name 'right' 'switch' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_308 with list_together BC_309 with plural BC_310 ; Object I152_label "" class K2_thing with short_name BC_311 with description BC_312 with vector 0 has mark_as_thing with component_parent I149_pair_of_lights with IK2_Count 24 with IK2_Link I153_block_of_ice with KD_Count 2 with name 'label' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_313 with list_together BC_314 with plural BC_315 with article BC_316 ; Object I153_block_of_ice "" class K6_supporter with short_name BC_317 with article BC_318 with description BC_319 has static with vector 0 has mark_as_thing with component_child I154_vents with IK2_Count 25 with IK2_Link I154_vents with IK6_Count 0 with IK6_Link I158_desk with KD_Count 6 with name 'block' 'of' 'ice' 'supporters//p' 'puddle' with parse_name Parse_Name_GV99 with action_bitmap 0 0 0 0 0 0 with initial BC_320 with list_together BC_321 with plural BC_322 ; Object I154_vents "" class K2_thing with short_name BC_323 with description BC_324 has proper with vector 0 with cap_short_name BC_325 has mark_as_thing with component_parent I153_block_of_ice with component_sibling I155_stool with IK2_Count 26 with IK2_Link I155_stool with KD_Count 2 with name 'vents' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_326 with list_together BC_327 with plural BC_328 with article BC_329 ; Object I155_stool "" class K2_thing with short_name BC_330 with article BC_331 with description BC_332 with vector 0 has mark_as_thing with component_parent I153_block_of_ice with component_sibling I156_gadgetry with IK2_Count 27 with IK2_Link I156_gadgetry with KD_Count 2 with name 'stool' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_333 with list_together BC_334 with plural BC_335 ; Object I156_gadgetry "" class K2_thing with short_name BC_336 with description BC_337 has proper with vector 0 with cap_short_name BC_338 has mark_as_thing with component_parent I153_block_of_ice with IK2_Count 28 with IK2_Link I157_orange_berry with KD_Count 2 with name 'gadgetry' 'things//p' 'machinery' with parse_name Parse_Name_GV100 with action_bitmap 0 0 0 0 0 0 with initial BC_339 with list_together BC_340 with plural BC_341 with article BC_342 ; Object I157_orange_berry "" class K2_thing with short_name BC_343 with description BC_344 with vector 0 has mark_as_thing with IK2_Count 29 with IK2_Link I158_desk with KD_Count 2 with name 'orange' 'berry' 'things//p' 'berries' with parse_name Parse_Name_GV101 with action_bitmap 0 0 0 0 0 0 with initial BC_345 with list_together BC_346 with plural BC_347 with article BC_348 ; Object I158_desk "" class K6_supporter with short_name BC_349 with article BC_350 with description BC_351 with vector 0 has mark_as_thing with component_child I159_drawer with IK2_Count 30 with IK2_Link I159_drawer with IK6_Count 1 with IK6_Link I160_table with KD_Count 6 with name 'desk' 'supporters//p' with action_bitmap 0 0 0 0 0 0 with initial BC_352 with list_together BC_353 with plural BC_354 ; Object I159_drawer "" class K5_container with short_name BC_355 with article BC_356 with description BC_357 has ~open has openable with vector 0 has mark_as_thing with component_parent I158_desk with IK2_Count 31 with IK2_Link I160_table with IK5_Count 1 with IK5_Link I161_slide_puzzle_box with KD_Count 5 with name 'drawer' 'containers//p' with action_bitmap 0 0 0 0 0 0 with initial BC_358 with list_together BC_359 with plural BC_360 ; Object I160_table "" class K6_supporter with short_name BC_361 with article BC_362 with description BC_363 with vector 0 has mark_as_thing with IK2_Count 32 with IK2_Link I161_slide_puzzle_box with IK6_Count 2 with IK6_Link nothing with KD_Count 6 with name 'table' 'supporters//p' with action_bitmap 0 0 0 0 0 0 with initial BC_364 with list_together BC_365 with plural BC_366 ; Object I161_slide_puzzle_box "" class K5_container with short_name BC_367 with article BC_368 with description BC_369 has static has ~transparent has ~open has ~openable with vector 0 has mark_as_thing with IK2_Count 33 with IK2_Link I162_hammer with IK5_Count 2 with IK5_Link I163_lockbox with KD_Count 5 with name 'slide' 'puzzle' 'box' 'containers//p' with action_bitmap 0 0 0 0 0 0 with initial BC_370 with list_together BC_371 with plural BC_372 ; Object I162_hammer "" class K2_thing with short_name BC_373 with article BC_374 with description BC_375 with vector 0 has mark_as_thing with IK2_Count 34 with IK2_Link I163_lockbox with KD_Count 2 with name 'hammer' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_376 with list_together BC_377 with plural BC_378 ; Object I163_lockbox "" class K5_container with short_name BC_379 with article BC_380 with description BC_381 with with_key I146_wide_key has static has ~transparent has ~open has openable has lockable has locked with vector 0 has mark_as_thing with IK2_Count 35 with IK2_Link I164_wooden_box with IK5_Count 3 with IK5_Link I164_wooden_box with KD_Count 5 with name 'lockbox' 'containers//p' 'box' with parse_name Parse_Name_GV102 with action_bitmap 0 0 0 0 0 0 with initial BC_382 with list_together BC_383 with plural BC_384 ; Object I164_wooden_box "" class K5_container with short_name BC_385 with article BC_386 with description BC_387 has ~transparent has ~open has ~openable with vector 0 has mark_as_thing with IK2_Count 36 with IK2_Link I165_screwdriver with IK5_Count 4 with IK5_Link nothing with KD_Count 5 with name 'wooden' 'box' 'containers//p' 'lid' 'screw' 'screws' with parse_name Parse_Name_GV103 with action_bitmap 0 0 0 0 0 0 with initial BC_388 with list_together BC_389 with plural BC_390 ; Object I165_screwdriver "" class K2_thing with short_name BC_391 with article BC_392 with description BC_393 with vector 0 has mark_as_thing with IK2_Count 37 with IK2_Link I169_tape with KD_Count 2 with name 'screwdriver' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_394 with list_together BC_395 with plural BC_396 ; Object I168_testing_area "" class K1_room with short_name BC_397 with description BC_398 with vector 0 with room_index -1 has mark_as_room with IK1_Count 1 with IK1_Link I176_lower_landing with KD_Count 1 with name 'testing' 'area' 'rooms//p' with list_together BC_399 with plural BC_400 with article BC_401 ; Object -> I169_tape "" class K2_thing with short_name BC_402 with description BC_403 has static has scenery with vector 0 has mark_as_thing with IK2_Count 39 with IK2_Link I170_spotlights with KD_Count 2 with name 'tape' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_404 with list_together BC_405 with plural BC_406 with article BC_407 ; Object -> I170_spotlights "" class K2_thing with short_name BC_408 with description BC_409 has static has scenery with vector 0 has mark_as_thing with IK2_Count 40 with IK2_Link I171_equipment with KD_Count 2 with name 'spotlights' 'things//p' 'lights' with parse_name Parse_Name_GV106 with action_bitmap 0 0 0 0 0 0 with initial BC_410 with list_together BC_411 with plural BC_412 with article BC_413 ; Object -> I171_equipment "" class K2_thing with short_name BC_414 with description BC_415 has static has scenery with vector 0 has mark_as_thing with IK2_Count 41 with IK2_Link I172_windowed_room with KD_Count 2 with name 'equipment' 'things//p' 'projector' 'projectors' 'light' with parse_name Parse_Name_GV107 with action_bitmap 0 0 0 0 0 0 with initial BC_416 with list_together BC_417 with plural BC_418 with article BC_419 ; Object -> I172_windowed_room "" class K2_thing with short_name BC_420 with description BC_421 has static has scenery with vector 0 has mark_as_thing with IK2_Count 42 with IK2_Link I173_fake_room with KD_Count 2 with name 'windowed' 'room' 'things//p' 'window' with parse_name Parse_Name_GV108 with action_bitmap 0 0 0 0 0 0 with initial BC_422 with list_together BC_423 with plural BC_424 with article BC_425 ; Object -> I173_fake_room "" class K2_thing with short_name BC_426 with description BC_427 has static has scenery with vector 0 has mark_as_thing with IK2_Count 43 with IK2_Link I174_first_staircase with KD_Count 2 with name 'fake' 'room' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_428 with list_together BC_429 with plural BC_430 with article BC_431 ; Object -> I174_first_staircase "" class K4_door with short_name BC_432 with description BC_433 has open has ~openable has ~locked with vector 0 with door_dir I59_up has mark_as_thing with IK2_Count 44 with IK2_Link I175_red_light with IK4_Count 1 with IK4_Link I178_second_staircase with KD_Count 4 with name 'first' 'staircase' 'doors//p' 'stairs' with parse_name Parse_Name_GV109 with action_bitmap 0 0 0 0 0 0 with initial BC_434 with list_together BC_435 with plural BC_436 with article BC_437 ; Object -> I175_red_light "" class K2_thing with short_name BC_438 with description BC_439 has static has scenery with vector 0 has mark_as_thing with IK2_Count 45 with IK2_Link I177_yellow_light with KD_Count 2 with name 'red' 'light' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_440 with list_together BC_441 with plural BC_442 with article BC_443 ; Object I176_lower_landing "" class K1_room with short_name BC_444 with description BC_445 with vector 0 with room_index -1 has mark_as_room with IK1_Count 2 with IK1_Link I179_upper_landing with KD_Count 1 with name 'lower' 'landing' 'rooms//p' with list_together BC_446 with plural BC_447 with article BC_448 ; Object -> I177_yellow_light "" class K2_thing with short_name BC_449 with description BC_450 has static has scenery with vector 0 has mark_as_thing with IK2_Count 46 with IK2_Link I178_second_staircase with KD_Count 2 with name 'yellow' 'light' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_451 with list_together BC_452 with plural BC_453 with article BC_454 ; Object -> I178_second_staircase "" class K4_door with short_name BC_455 with description BC_456 has open has ~openable has ~locked with vector 0 with door_dir [ loc ! room of actor ; loc = location; if (loc == thedark) loc = real_location; if (loc == I176_lower_landing) return I59_up; return I60_down;], with door_to [ loc ! room of actor ; loc = location; if (loc == thedark) loc = real_location; if (loc == I176_lower_landing) return I179_upper_landing; return I176_lower_landing;], with found_in I176_lower_landing I179_upper_landing has mark_as_thing with IK2_Count 47 with IK2_Link I180_steel_door with IK4_Count 2 with IK4_Link I180_steel_door with KD_Count 4 with name 'second' 'staircase' 'doors//p' 'stairs' with parse_name Parse_Name_GV110 with action_bitmap 0 0 0 0 0 0 with initial BC_457 with list_together BC_458 with plural BC_459 with article BC_460 ; Object I179_upper_landing "" class K1_room with short_name BC_461 with description BC_462 with vector 0 with room_index -1 has mark_as_room with IK1_Count 3 with IK1_Link I181_observation_room with KD_Count 1 with name 'upper' 'landing' 'rooms//p' with list_together BC_463 with plural BC_464 with article BC_465 ; Object -> I180_steel_door "" class K4_door with short_name BC_466 with description BC_467 has ~open has ~locked with vector 0 with door_dir I51_north has mark_as_thing with IK2_Count 48 with IK2_Link I182_agent with IK4_Count 3 with IK4_Link I184_wooden_door with KD_Count 4 with name 'steel' 'door' 'doors//p' with action_bitmap 0 0 0 0 0 0 with initial BC_468 with list_together BC_469 with plural BC_470 with article BC_471 ; Object I181_observation_room "" class K1_room with short_name BC_472 with description BC_473 with vector 0 with room_index -1 has mark_as_room with IK1_Count 4 with IK1_Link nothing with KD_Count 1 with name 'observation' 'room' 'rooms//p' with list_together BC_474 with plural BC_475 with article BC_476 ; Object -> I182_agent "" class K10_man with short_name BC_477 with description BC_478 with initial BC_479 with vector 0 has mark_as_thing with IK2_Count 49 with IK2_Link I183_astronaut with IK8_Count 1 with IK8_Link I183_astronaut with IK10_Count 0 with IK10_Link I183_astronaut with KD_Count 10 with name 'agent' 'men//p' 'man' with parse_name Parse_Name_GV111 with action_bitmap 0 0 0 0 0 0 with list_together BC_480 with plural BC_481 with article BC_482 ; Object -> I183_astronaut "" class K10_man with short_name BC_483 with description BC_484 with initial BC_485 with vector 0 has mark_as_thing with IK2_Count 50 with IK2_Link I184_wooden_door with IK8_Count 2 with IK8_Link nothing with IK10_Count 1 with IK10_Link nothing with KD_Count 10 with name 'astronaut' 'men//p' 'alien' with parse_name Parse_Name_GV112 with action_bitmap 0 0 0 0 0 0 with list_together BC_486 with plural BC_487 with article BC_488 ; Object -> I184_wooden_door "" class K4_door with short_name BC_489 with description BC_490 with initial BC_491 with vector 0 with door_dir I58_west has mark_as_thing with IK2_Count 51 with IK2_Link I185_carpet with IK4_Count 4 with IK4_Link nothing with KD_Count 4 with name 'wooden' 'door' 'doors//p' with action_bitmap 0 0 0 0 0 0 with list_together BC_492 with plural BC_493 with article BC_494 ; Object -> I185_carpet "" class K2_thing with short_name BC_495 with description BC_496 has static has scenery with vector 0 has mark_as_thing with IK2_Count 52 with IK2_Link I186_wooden_paneling_walls with KD_Count 2 with name 'carpet' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_497 with list_together BC_498 with plural BC_499 with article BC_500 ; Object -> I186_wooden_paneling_walls "" class K2_thing with short_name BC_501 with description BC_502 has static has scenery with vector 0 has mark_as_thing with IK2_Count 53 with IK2_Link I187_crummy_white_plastic_ta with KD_Count 2 with name 'wooden' 'paneling' 'walls' 'things//p' 'wood' 'panels' with parse_name Parse_Name_GV113 with action_bitmap 0 0 0 0 0 0 with initial BC_503 with list_together BC_504 with plural BC_505 with article BC_506 ; Object -> I187_crummy_white_plastic_ta "" class K2_thing with short_name BC_507 with description BC_508 has static has scenery with vector 0 has mark_as_thing with IK2_Count 54 with IK2_Link I188_window with KD_Count 2 with name 'crummy' 'white' 'plastic' 'table' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_509 with list_together BC_510 with plural BC_511 with article BC_512 ; Object -> I188_window "" class K2_thing with short_name BC_513 with description BC_514 has static has scenery with vector 0 has mark_as_thing with IK2_Count 55 with IK2_Link nothing with KD_Count 2 with name 'window' 'things//p' with action_bitmap 0 0 0 0 0 0 with initial BC_515 with list_together BC_516 with plural BC_517 with article BC_518 ; Constant I71_english_language = 1; Constant I72_french_language = 2; Constant I73_german_language = 3; Constant I74_italian_language = 4; Constant I75_spanish_language = 5; Constant I76_swedish_language = 6; Constant I77_figure_of_cover = 1; Constant I78_entire_game = 1; Constant I80_didn_t_understand_error = 1; Constant I81_only_understood_as_far_a = 2; Constant I82_didn_t_understand_that_n = 3; Constant I83_can_only_do_that_to_some = 4; Constant I84_can_t_see_any_such_thing = 5; Constant I85_said_too_little_error = 6; Constant I86_aren_t_holding_that_erro = 7; Constant I87_can_t_use_multiple_objec = 8; Constant I88_can_only_use_multiple_ob = 9; Constant I89_not_sure_what_it_refers_ = 10; Constant I90_excepted_something_not_i = 11; Constant I91_not_a_verb_i_recognise_e = 12; Constant I92_not_something_you_need_t = 13; Constant I93_can_t_see_it_at_the_mome = 14; Constant I94_didn_t_understand_the_wa = 15; Constant I95_not_enough_of_those_avai = 16; Constant I96_nothing_to_do_error = 17; Constant I97_noun_did_not_make_sense_ = 18; Constant I98_referred_to_a_determinat = 19; Constant I99_i_beg_your_pardon_error = 20; Constant I100_can_t_again_the_address = 21; Constant I101_comma_can_t_begin_error = 22; Constant I102_can_t_see_whom_to_talk_ = 23; Constant I103_can_t_talk_to_inanimate = 24; Constant I104_didn_t_understand_addre = 25; Constant I106_present_tense = 1; Constant I107_past_tense = 2; Constant I108_perfect_tense = 3; Constant I109_past_perfect_tense = 4; Constant I110_future_tense = 5; Constant I112_first_person_singular = 1; Constant I113_second_person_singular = 2; Constant I114_third_person_singular = 3; Constant I115_first_person_plural = 4; Constant I116_second_person_plural = 5; Constant I117_third_person_plural = 6; Constant I119_nominative = 1; Constant I120_accusative = 2; Constant I122_neuter_gender = 1; Constant I123_masculine_gender = 2; Constant I124_feminine_gender = 3; Constant I127_mystery = 2; Constant I167_discovery = 3; Array Global_Vars --> (false) ! 7 darkness witnessed (BC_519) ! 25 command prompt (I71_english_language) ! 29 language of play (BC_520) ! 32 story author (BC_521) ! 33 story headline (BC_522) ! 34 story genre (BC_523) ! 35 story description (1) ! 36 release number (2020) ! 37 story creation year (0) ! 45 locale paragraph count (T2_ordinary_status) ! 60 status bar table (14) ! 61 right alignment depth (0) ! 64 solved (0) ! 65 clues (BC_524) ! 66 light-sequence (BC_525) ! 67 attempted-sequence (0) ! 68 sos (0) ! 69 activatee (0) ! 70 furniture (0) ! 71 code (0) ! 72 screwed (0) ! 73 cont (0) ! 74 rooms cleared (0) ! 75 conversation ; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array T0_final_question_options table tab_0_0 tab_0_1 tab_0_2 tab_0_3 tab_0_4; Array tab_0_0 table $0664 0 (BC_526) (BC_527) (BC_528) (BC_529) (BC_530) ; Array tab_0_1 table $0465 1 (0) (0) (1) (0) (0) ; Array tab_0_2 table $2066 2 (Consult_Grammar_120) (Consult_Grammar_121) (Consult_Grammar_122) (Consult_Grammar_123) (Consult_Grammar_124) ; Array tab_0_3 table $0067 3 (IMMEDIATELY_RESTART_VM_R) (IMMEDIATELY_RESTORE_SAVED_R) ( TABLE_NOVALUE) (IMMEDIATELY_QUIT_R) (IMMEDIATELY_UNDO_R) ; Array tab_0_4 table $0068 4 ( TABLE_NOVALUE) ( TABLE_NOVALUE) (V27_amusing_a_victorious_pla) ( TABLE_NOVALUE) ( TABLE_NOVALUE) ; Array T1_locale_priorities table tab_1_0 tab_1_1; Array tab_1_0 table $0869 NULL ( TABLE_NOVALUE) TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array tab_1_1 table $446a 5 ( TABLE_NOVALUE) TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE TABLE_NOVALUE; Array T2_ordinary_status table tab_2_0 tab_2_1 tab_2_2; Array tab_2_0 table $066b 13 (BC_531) ; Array tab_2_1 table $066c 14 (BC_532) ; Array tab_2_2 table $066d 15 (BC_533) ; Array TB_Blanks -> ! For table T0_final_question_options $00 ! Column 0 $00 ! Column 1 $00 ! Column 2 $04 ! Column 3 $1b ! Column 4 ! For table T1_locale_priorities $ff $ff $ff $ff $ff $ff $ff $01 ! Column 1 ! For table T2_ordinary_status $00 ! Column 0 $00 ! Column 1 $00 ! Column 2 ! End of table NULL NULL; Array TableOfTables --> TheEmptyTable T0_final_question_options T1_locale_priorities T2_ordinary_status 0 0; [ TC_KOV tc ! Implied call parameter ; switch (tc) { 100: return TEXT_TY; ! final question wording: text 101: return TRUTH_STATE_TY; ! only if victorious: truth state 102: return UNDERSTANDING_TY; ! topic: topic 103: return KD1_rule; ! final response rule: rule 104: return KD2_activity; ! final response activity: activity 105: return OBJECT_TY; ! notable-object: object 106: return NUMBER_TY; ! locale description priority: number 107: return TEXT_TY; ! left: text 108: return TEXT_TY; ! central: text 109: return TEXT_TY; ! right: text } return UNKNOWN_TY; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Equations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Actions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array ActionData table ##Inv $$00000000 OBJECT_TY OBJECT_TY 0 20000 ##Take $$00001001 OBJECT_TY OBJECT_TY 0 20001 ##Remove $$00011011 OBJECT_TY OBJECT_TY 0 20002 ##Drop $$00001001 OBJECT_TY OBJECT_TY 0 20003 ##PutOn $$00011011 OBJECT_TY OBJECT_TY 0 20004 ##Insert $$00011011 OBJECT_TY OBJECT_TY 0 20005 ##Eat $$00001001 OBJECT_TY OBJECT_TY 0 20006 ##Go $$00001000 OBJECT_TY OBJECT_TY ANSTVC_7 20007 ##Enter $$00001001 OBJECT_TY OBJECT_TY 0 20008 ##Exit $$00000000 OBJECT_TY OBJECT_TY ANSTVC_9 20009 ##GetOff $$00001001 OBJECT_TY OBJECT_TY 0 20010 ##Look $$00000000 OBJECT_TY OBJECT_TY ANSTVC_11 20011 ##Examine $$00001100 OBJECT_TY OBJECT_TY ANSTVC_12 20012 ##LookUnder $$00001100 OBJECT_TY OBJECT_TY 0 20013 ##Search $$00001101 OBJECT_TY OBJECT_TY 0 20014 ##Consult $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20015 ##Lock $$10011011 OBJECT_TY OBJECT_TY 0 20016 ##Unlock $$10011011 OBJECT_TY OBJECT_TY 0 20017 ##SwitchOn $$00001001 OBJECT_TY OBJECT_TY 0 20018 ##SwitchOff $$00001001 OBJECT_TY OBJECT_TY 0 20019 ##Open $$00001001 OBJECT_TY OBJECT_TY 0 20020 ##Close $$00001001 OBJECT_TY OBJECT_TY 0 20021 ##Wear $$01001001 OBJECT_TY OBJECT_TY 0 20022 ##Disrobe $$00001001 OBJECT_TY OBJECT_TY 0 20023 ##Give $$01011011 OBJECT_TY OBJECT_TY 0 20024 ##Show $$01011001 OBJECT_TY OBJECT_TY 0 20025 ##WakeOther $$00001001 OBJECT_TY OBJECT_TY 0 20026 ##ThrowAt $$01011001 OBJECT_TY OBJECT_TY 0 20027 ##Attack $$00001001 OBJECT_TY OBJECT_TY 0 20028 ##Kiss $$00001001 OBJECT_TY OBJECT_TY 0 20029 ##Answer $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20030 ##Tell $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20031 ##Ask $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20032 ##AskFor $$00011011 OBJECT_TY OBJECT_TY 0 20033 ##Wait $$00000000 OBJECT_TY OBJECT_TY 0 20034 ##Touch $$00001001 OBJECT_TY OBJECT_TY 0 20035 ##Wave $$00001001 OBJECT_TY OBJECT_TY 0 20036 ##Pull $$00001001 OBJECT_TY OBJECT_TY 0 20037 ##Push $$00001001 OBJECT_TY OBJECT_TY 0 20038 ##Turn $$00001001 OBJECT_TY OBJECT_TY 0 20039 ##PushDir $$00011001 OBJECT_TY OBJECT_TY 0 20040 ##Squeeze $$00001001 OBJECT_TY OBJECT_TY 0 20041 ##Yes $$00000000 OBJECT_TY OBJECT_TY 0 20042 ##No $$00000000 OBJECT_TY OBJECT_TY 0 20043 ##Burn $$00001001 OBJECT_TY OBJECT_TY 0 20044 ##Wake $$00000000 OBJECT_TY OBJECT_TY 0 20045 ##Think $$00000000 OBJECT_TY OBJECT_TY 0 20046 ##Smell $$00001001 OBJECT_TY OBJECT_TY 0 20047 ##Listen $$00001001 OBJECT_TY OBJECT_TY 0 20048 ##Taste $$00001001 OBJECT_TY OBJECT_TY 0 20049 ##Cut $$00001001 OBJECT_TY OBJECT_TY 0 20050 ##Jump $$00000000 OBJECT_TY OBJECT_TY 0 20051 ##Tie $$00011011 OBJECT_TY OBJECT_TY 0 20052 ##Drink $$00001001 OBJECT_TY OBJECT_TY 0 20053 ##Sorry $$00000000 OBJECT_TY OBJECT_TY 0 20054 ##Swing $$00001001 OBJECT_TY OBJECT_TY 0 20055 ##Rub $$00001001 OBJECT_TY OBJECT_TY 0 20056 ##SetTo $$00011001 OBJECT_TY UNDERSTANDING_TY 0 20057 ##WaveHands $$00000000 OBJECT_TY OBJECT_TY 0 20058 ##Buy $$00001001 OBJECT_TY OBJECT_TY 0 20059 ##Climb $$00001001 OBJECT_TY OBJECT_TY 0 20060 ##Sleep $$00000000 OBJECT_TY OBJECT_TY 0 20061 ##Quit $$00100000 OBJECT_TY OBJECT_TY 0 20062 ##Save $$00100000 OBJECT_TY OBJECT_TY 0 20063 ##Restore $$00100000 OBJECT_TY OBJECT_TY 0 20064 ##Restart $$00100000 OBJECT_TY OBJECT_TY 0 20065 ##Verify $$00100000 OBJECT_TY OBJECT_TY 0 20066 ##ScriptOn $$00100000 OBJECT_TY OBJECT_TY 0 20067 ##ScriptOff $$00100000 OBJECT_TY OBJECT_TY 0 20068 ##Version $$00100000 OBJECT_TY OBJECT_TY 0 20069 ##Score $$00100000 OBJECT_TY OBJECT_TY 0 20070 ##LMode3 $$00100000 OBJECT_TY OBJECT_TY 0 20071 ##LMode2 $$00100000 OBJECT_TY OBJECT_TY 0 20072 ##LMode1 $$00100000 OBJECT_TY OBJECT_TY 0 20073 ##NotifyOn $$00100000 OBJECT_TY OBJECT_TY 0 20074 ##NotifyOff $$00100000 OBJECT_TY OBJECT_TY 0 20075 ##Pronouns $$00100000 OBJECT_TY OBJECT_TY 0 20076 ##A77_unlocking_keylessly $$00001001 OBJECT_TY OBJECT_TY ANSTVC_77 20077 ##A78_locking_keylessly $$00001001 OBJECT_TY OBJECT_TY ANSTVC_78 20078 ##A79_escaping $$00000000 OBJECT_TY OBJECT_TY 0 20079 ##A80_typing $$00001000 NUMBER_TY OBJECT_TY 0 20080 ##A81_unscrewing $$00001000 OBJECT_TY OBJECT_TY 0 20081 ##A82_helping $$00000000 OBJECT_TY OBJECT_TY 0 20082 ##A83_hinting $$00000000 OBJECT_TY OBJECT_TY 0 20083 ; Constant AD_RECORDS = 84; [ ANSTVC_7 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = I128_mysterious_room; pos++; MStack-->pos = nothing; pos++; MStack-->pos = nothing; pos++; MStack-->pos = nothing; pos++; MStack-->pos = nothing; pos++; } else { pos++; pos++; pos++; pos++; pos++; } return 5; ]; [ ANSTVC_9 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = nothing; pos++; } else { pos++; } return 1; ]; [ ANSTVC_11 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = ##Wait; pos++; MStack-->pos = false; pos++; MStack-->pos = 0; pos++; MStack-->pos = nothing; pos++; } else { pos++; pos++; pos++; pos++; } return 4; ]; [ ANSTVC_12 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = false; pos++; } else { pos++; } return 1; ]; [ ANSTVC_77 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = nothing; pos++; } else { pos++; } return 1; ]; [ ANSTVC_78 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = nothing; pos++; } else { pos++; } return 1; ]; [ DB_Action_Details act ! Implied call parameter n ! Implied call parameter s ! Implied call parameter for_say ! Implied call parameter ; switch (act) { ##Inv: print "taking inventory"; ##Take: print "taking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Remove: print "removing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "from"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Drop: print "dropping"; if (for_say ~= 2) { print " "; DA_Name(n); } ##PutOn: print "putting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "on"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Insert: print "inserting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "into"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Eat: print "eating"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Go: print "going"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Enter: print "entering"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Exit: print "exiting"; ##GetOff: print "getting off"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Look: print "looking"; ##Examine: print "examining"; if (for_say ~= 2) { print " "; DA_Name(n); } ##LookUnder: print "looking under"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Search: print "searching"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Consult: print "consulting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "about"; if (for_say ~= 2) { print " "; DA_Topic(100*consult_from + consult_words); } ##Lock: print "locking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "with"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Unlock: print "unlocking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "with"; if (for_say ~= 2) { print " "; DA_Name(s); } ##SwitchOn: print "switching on"; if (for_say ~= 2) { print " "; DA_Name(n); } ##SwitchOff: print "switching off"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Open: print "opening"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Close: print "closing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Wear: print "wearing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Disrobe: print "taking off"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Give: print "giving"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Show: print "showing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##WakeOther: print "waking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##ThrowAt: print "throwing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "at"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Attack: print "attacking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Kiss: print "kissing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Answer: print "answering"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "that"; if (for_say ~= 2) { print " "; DA_Topic(100*consult_from + consult_words); } ##Tell: print "telling"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "about"; if (for_say ~= 2) { print " "; DA_Topic(100*consult_from + consult_words); } ##Ask: print "asking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "about"; if (for_say ~= 2) { print " "; DA_Topic(100*consult_from + consult_words); } ##AskFor: print "asking"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "for"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Wait: print "waiting"; ##Touch: print "touching"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Wave: print "waving"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Pull: print "pulling"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Push: print "pushing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Turn: print "turning"; if (for_say ~= 2) { print " "; DA_Name(n); } ##PushDir: print "pushing"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Squeeze: print "squeezing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Yes: print "saying yes"; ##No: print "saying no"; ##Burn: print "burning"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Wake: print "waking up"; ##Think: print "thinking"; ##Smell: print "smelling"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Listen: print "listening to"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Taste: print "tasting"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Cut: print "cutting"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Jump: print "jumping"; ##Tie: print "tying"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Name(s); } ##Drink: print "drinking"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Sorry: print "saying sorry"; ##Swing: print "swinging"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Rub: print "rubbing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##SetTo: print "setting"; print " "; if (for_say == 2) print "it"; else DA_Name(n); print " "; print "to"; if (for_say ~= 2) { print " "; DA_Topic(100*consult_from + consult_words); } ##WaveHands: print "waving hands"; ##Buy: print "buying"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Climb: print "climbing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##Sleep: print "sleeping"; ##Quit: print "quitting the game"; ##Save: print "saving the game"; ##Restore: print "restoring the game"; ##Restart: print "restarting the game"; ##Verify: print "verifying the story file"; ##ScriptOn: print "switching the story transcript on"; ##ScriptOff: print "switching the story transcript off"; ##Version: print "requesting the story file version"; ##Score: print "requesting the score"; ##LMode3: print "preferring abbreviated room descriptions"; ##LMode2: print "preferring unabbreviated room descriptions"; ##LMode1: print "preferring sometimes abbreviated room descriptions"; ##NotifyOn: print "switching score notification on"; ##NotifyOff: print "switching score notification off"; ##Pronouns: print "requesting the pronoun meanings"; ##A77_unlocking_keylessly: print "unlocking keylessly"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A78_locking_keylessly: print "locking keylessly"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A79_escaping: print "escaping"; ##A80_typing: print "typing"; if (for_say ~= 2) { print " "; DA_Number(parsed_number); } ##A81_unscrewing: print "unscrewing"; if (for_say ~= 2) { print " "; DA_Name(n); } ##A82_helping: print "helping"; ##A83_hinting: print "hinting"; } ]; Array ActionCoding --> ##Inv ##Take ##Remove ##Drop ##PutOn ##Insert ##Eat ##Go ##Enter ##Exit ##GetOff ##Look ##Examine ##LookUnder ##Search ##Consult ##Lock ##Unlock ##SwitchOn ##SwitchOff ##Open ##Close ##Wear ##Disrobe ##Give ##Show ##WakeOther ##ThrowAt ##Attack ##Kiss ##Answer ##Tell ##Ask ##AskFor ##Wait ##Touch ##Wave ##Pull ##Push ##Turn ##PushDir ##Squeeze ##Yes ##No ##Burn ##Wake ##Think ##Smell ##Listen ##Taste ##Cut ##Jump ##Tie ##Drink ##Sorry ##Swing ##Rub ##SetTo ##WaveHands ##Buy ##Climb ##Sleep ##Quit ##Save ##Restore ##Restart ##Verify ##ScriptOn ##ScriptOff ##Version ##Score ##LMode3 ##LMode2 ##LMode1 ##NotifyOn ##NotifyOff ##Pronouns ##A77_unlocking_keylessly ##A78_locking_keylessly ##A79_escaping ##A80_typing ##A81_unscrewing ##A82_helping ##A83_hinting; Array ActionHappened --> 0 0 0 0 0 0; [ InvSub ; return GenericVerbSub(131,132,133); ]; [ TakeSub ; return GenericVerbSub(134,135,136); ]; [ RemoveSub ; return GenericVerbSub(137,138,139); ]; [ DropSub ; return GenericVerbSub(140,141,142); ]; [ PutOnSub ; return GenericVerbSub(143,144,145); ]; [ InsertSub ; return GenericVerbSub(146,147,148); ]; [ EatSub ; return GenericVerbSub(149,150,151); ]; [ GoSub ; return GenericVerbSub(152,153,154); ]; [ EnterSub ; return GenericVerbSub(155,156,157); ]; [ ExitSub ; return GenericVerbSub(158,159,160); ]; [ GetOffSub ; return GenericVerbSub(161,162,163); ]; [ LookSub ; return GenericVerbSub(164,165,166); ]; [ ExamineSub ; return GenericVerbSub(167,168,169); ]; [ LookUnderSub ; return GenericVerbSub(170,171,172); ]; [ SearchSub ; return GenericVerbSub(173,174,175); ]; [ ConsultSub ; return GenericVerbSub(176,177,178); ]; [ LockSub ; return GenericVerbSub(179,180,181); ]; [ UnlockSub ; return GenericVerbSub(182,183,184); ]; [ SwitchOnSub ; return GenericVerbSub(185,186,187); ]; [ SwitchOffSub ; return GenericVerbSub(188,189,190); ]; [ OpenSub ; return GenericVerbSub(191,192,193); ]; [ CloseSub ; return GenericVerbSub(194,195,196); ]; [ WearSub ; return GenericVerbSub(197,198,199); ]; [ DisrobeSub ; return GenericVerbSub(200,201,202); ]; [ GiveSub ; return GenericVerbSub(203,204,205); ]; [ ShowSub ; return GenericVerbSub(206,207,208); ]; [ WakeOtherSub ; return GenericVerbSub(209,210,211); ]; [ ThrowAtSub ; return GenericVerbSub(212,213,214); ]; [ AttackSub ; return GenericVerbSub(215,216,217); ]; [ KissSub ; return GenericVerbSub(218,219,220); ]; [ AnswerSub ; return GenericVerbSub(221,222,223); ]; [ TellSub ; return GenericVerbSub(224,225,226); ]; [ AskSub ; return GenericVerbSub(227,228,229); ]; [ AskForSub ; return GenericVerbSub(230,231,232); ]; [ WaitSub ; return GenericVerbSub(233,234,235); ]; [ TouchSub ; return GenericVerbSub(236,237,238); ]; [ WaveSub ; return GenericVerbSub(239,240,241); ]; [ PullSub ; return GenericVerbSub(242,243,244); ]; [ PushSub ; return GenericVerbSub(245,246,247); ]; [ TurnSub ; return GenericVerbSub(248,249,250); ]; [ PushDirSub ; return GenericVerbSub(251,252,253); ]; [ SqueezeSub ; return GenericVerbSub(254,255,256); ]; [ YesSub ; return GenericVerbSub(257,258,259); ]; [ NoSub ; return GenericVerbSub(260,261,262); ]; [ BurnSub ; return GenericVerbSub(263,264,265); ]; [ WakeSub ; return GenericVerbSub(266,267,268); ]; [ ThinkSub ; return GenericVerbSub(269,270,271); ]; [ SmellSub ; return GenericVerbSub(272,273,274); ]; [ ListenSub ; return GenericVerbSub(275,276,277); ]; [ TasteSub ; return GenericVerbSub(278,279,280); ]; [ CutSub ; return GenericVerbSub(281,282,283); ]; [ JumpSub ; return GenericVerbSub(284,285,286); ]; [ TieSub ; return GenericVerbSub(287,288,289); ]; [ DrinkSub ; return GenericVerbSub(290,291,292); ]; [ SorrySub ; return GenericVerbSub(293,294,295); ]; [ SwingSub ; return GenericVerbSub(296,297,298); ]; [ RubSub ; return GenericVerbSub(299,300,301); ]; [ SetToSub ; return GenericVerbSub(302,303,304); ]; [ WaveHandsSub ; return GenericVerbSub(305,306,307); ]; [ BuySub ; return GenericVerbSub(308,309,310); ]; [ ClimbSub ; return GenericVerbSub(311,312,313); ]; [ SleepSub ; return GenericVerbSub(314,315,316); ]; [ QuitSub ; return GenericVerbSub(317,318,319); ]; [ SaveSub ; return GenericVerbSub(320,321,322); ]; [ RestoreSub ; return GenericVerbSub(323,324,325); ]; [ RestartSub ; return GenericVerbSub(326,327,328); ]; [ VerifySub ; return GenericVerbSub(329,330,331); ]; [ ScriptOnSub ; return GenericVerbSub(332,333,334); ]; [ ScriptOffSub ; return GenericVerbSub(335,336,337); ]; [ VersionSub ; return GenericVerbSub(338,339,340); ]; [ ScoreSub ; return GenericVerbSub(341,342,343); ]; [ LMode3Sub ; return GenericVerbSub(344,345,346); ]; [ LMode2Sub ; return GenericVerbSub(347,348,349); ]; [ LMode1Sub ; return GenericVerbSub(350,351,352); ]; [ NotifyOnSub ; return GenericVerbSub(353,354,355); ]; [ NotifyOffSub ; return GenericVerbSub(356,357,358); ]; [ PronounsSub ; return GenericVerbSub(359,360,361); ]; [ A77_unlocking_keylesslySub ; return GenericVerbSub(368,369,370); ]; [ A78_locking_keylesslySub ; return GenericVerbSub(371,372,373); ]; [ A79_escapingSub ; return GenericVerbSub(376,377,378); ]; [ A80_typingSub ; return GenericVerbSub(379,380,381); ]; [ A81_unscrewingSub ; return GenericVerbSub(382,383,384); ]; [ A82_helpingSub ; return GenericVerbSub(387,388,389); ]; [ A83_hintingSub ; return GenericVerbSub(390,391,392); ]; [ MistakeActionSub ; switch(understand_as_mistake_number) { 282: ParserError(BC_534); 283: ParserError(BC_535); 284: ParserError(BC_536); 285: ParserError(BC_537); 286: ParserError(BC_538); 287: ParserError(BC_539); 288: ParserError(BC_540); 289: ParserError(BC_541); default: "I didn't understand that sentence."; } say__p = 1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Phrases ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Definitions of rules in rulebooks ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Startup (B0_startup) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11: INITIALISE_MEMORY_R ! === equally specific with === ! Rule 2/11: VIRTUAL_MACHINE_STARTUP_R ! === equally specific with === ! Rule 3/11: SEED_RANDOM_NUMBER_GENERATOR_R ! === equally specific with === ! Rule 4/11: UPDATE_CHRONOLOGICAL_RECORDS_R ! === equally specific with === ! Rule 5/11 ! This is the declare everything initially unmentioned rule: ! === equally specific with === ! Rule 6/11: POSITION_PLAYER_IN_MODEL_R ! === equally specific with === ! Rule 7/11 ! This is the start in the correct scenes rule: ! --- now the mid-placed rules --- ! Rule 8/11 ! This is the when play begins stage rule: ! === equally specific with === ! Rule 9/11 ! This is the fix baseline scoring rule: ! === equally specific with === ! Rule 10/11 ! This is the display banner rule: ! === equally specific with === ! Rule 11/11 ! This is the initial room description rule: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! This is the declare everything initially unmentioned rule: [ R_9 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value (deallocated by end of phrase) ; if (debug_rules) DB_Rule(R_9, 9); ! [2: repeat with item running through things] for (tmp_0=Prop_0(0), tmp_1=Prop_0(tmp_0): tmp_0: tmp_0=tmp_1, tmp_1=Prop_0(tmp_1)) {! [3: now the item is not mentioned] (Adj_69_t3_v10(tmp_0)); } rfalse; ]; ! From the Standard Rules ! No specific request ! This is the start in the correct scenes rule: [ R_10 ; if (debug_rules) DB_Rule(R_10, 10); ! [2: follow the scene changing rules] FollowRulebook(RULEBOOK_TY_to_RULE_TY(3)); rfalse; ]; ! From the Standard Rules ! No specific request ! This is the when play begins stage rule: [ R_11 ; if (debug_rules) DB_Rule(R_11, 11); ! [2: follow the when play begins rulebook] FollowRulebook(RULEBOOK_TY_to_RULE_TY(4)); rfalse; ]; ! From the Standard Rules ! No specific request ! This is the fix baseline scoring rule: [ R_12 ; if (debug_rules) DB_Rule(R_12, 12); ! [2: now the last notified score is the score] last_score = score; rfalse; ]; ! From the Standard Rules ! No specific request ! This is the display banner rule: [ R_13 ; if (debug_rules) DB_Rule(R_13, 13); ! [2: say ~[banner text]~] say__p=1;! [3: banner text] ParaContent(); Banner(); .L_Say0; .L_SayX0;rfalse; ]; ! From the Standard Rules ! No specific request ! This is the initial room description rule: [ R_14 ; if (debug_rules) DB_Rule(R_14, 14); ! [2: try looking] TryAction(0, player, ##Look, 0, 0); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Turn sequence (B1_turn_sequence) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/12: PARSE_COMMAND_R ! === equally specific with === ! Rule 2/12 ! This is the declare everything initially unmentioned rule: ! === equally specific with === ! Rule 3/12: GENERATE_ACTION_R ! === equally specific with === ! Rule 4/12 ! A first turn sequence rule: ! === equally specific with === ! Rule 5/12 ! A first turn sequence rule ( this is the every turn stage rule ): ! --- now the mid-placed rules --- ! Rule 6/12: TIMED_EVENTS_R ! === equally specific with === ! Rule 7/12: ADVANCE_TIME_R ! === equally specific with === ! Rule 8/12: UPDATE_CHRONOLOGICAL_RECORDS_R ! --- now the last-placed rules --- ! Rule 9/12 ! A last turn sequence rule: ! === equally specific with === ! Rule 10/12: ADJUST_LIGHT_R ! === equally specific with === ! Rule 11/12: NOTE_OBJECT_ACQUISITIONS_R ! === equally specific with === ! Rule 12/12 ! This is the notify score changes rule: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! A first turn sequence rule: [ R_16 ; if (debug_rules) DB_Rule(R_16, 16); ! [2: follow the scene changing rules] FollowRulebook(RULEBOOK_TY_to_RULE_TY(3)); rfalse; ]; ! From the Standard Rules ! No specific request ! A first turn sequence rule ( this is the every turn stage rule ): [ R_15 ; if (debug_rules) DB_Rule(R_15, 15); ! [2: follow the every turn rules] FollowRulebook(RULEBOOK_TY_to_RULE_TY(8)); rfalse; ]; ! From the Standard Rules ! No specific request ! A last turn sequence rule: [ R_17 ; if (debug_rules) DB_Rule(R_17, 17); ! [2: follow the scene changing rules] FollowRulebook(RULEBOOK_TY_to_RULE_TY(3)); rfalse; ]; ! From the Standard Rules ! No specific request ! This is the notify score changes rule: [ R_18 ; if (debug_rules) DB_Rule(R_18, 18); ! [2: if the score is not the last notified score] if (((~~((score == last_score))))) {! [3: issue score notification message] NotifyTheScore(); ! [4: now the last notified score is the score] last_score = score; } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Shutdown (B2_shutdown) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! This is the when play ends stage rule: ! --- now the last-placed rules --- ! Rule 2/4: RESURRECT_PLAYER_IF_ASKED_R ! === equally specific with === ! Rule 3/4 ! This is the print player's obituary rule: ! === equally specific with === ! Rule 4/4: ASK_FINAL_QUESTION_R ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! This is the when play ends stage rule: [ R_19 ; if (debug_rules) DB_Rule(R_19, 19); ! [2: follow the when play ends rulebook] FollowRulebook(RULEBOOK_TY_to_RULE_TY(5)); rfalse; ]; ! From the Standard Rules ! No specific request ! This is the print player's obituary rule: [ R_20 ; if (debug_rules) DB_Rule(R_20, 20); ! [2: carry out the printing the player's obituary activity] CarryOutActivity(V28_printing_the_player_s_ob); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: When play begins (B4_when_play_begins) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! When play begins: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! When play begins: [ R_852 I7RBLK; @push I7SFRAME; StackFrameCreate(18); BlkValueCreateOnStack(17, STORED_ACTION_TY); BlkValueCreateOnStack(16, STORED_ACTION_TY); BlkValueCreateOnStack(15, STORED_ACTION_TY); BlkValueCreateOnStack(14, STORED_ACTION_TY); BlkValueCreateOnStack(13, STORED_ACTION_TY); BlkValueCreateOnStack(12, STORED_ACTION_TY); BlkValueCreateOnStack(11, STORED_ACTION_TY); BlkValueCreateOnStack(10, STORED_ACTION_TY); BlkValueCreateOnStack(9, STORED_ACTION_TY); BlkValueCreateOnStack(8, STORED_ACTION_TY); BlkValueCreateOnStack(7, STORED_ACTION_TY); BlkValueCreateOnStack(6, STORED_ACTION_TY); BlkValueCreateOnStack(5, STORED_ACTION_TY); BlkValueCreateOnStack(4, STORED_ACTION_TY); BlkValueCreateOnStack(3, STORED_ACTION_TY); BlkValueCreateOnStack(2, STORED_ACTION_TY); BlkValueCreateOnStack(1, STORED_ACTION_TY); BlkValueCreateOnStack(0, STORED_ACTION_TY); I7RBLK = KERNEL_0(); BlkValueFreeOnStack(17); BlkValueFreeOnStack(16); BlkValueFreeOnStack(15); BlkValueFreeOnStack(14); BlkValueFreeOnStack(13); BlkValueFreeOnStack(12); BlkValueFreeOnStack(11); BlkValueFreeOnStack(10); BlkValueFreeOnStack(9); BlkValueFreeOnStack(8); BlkValueFreeOnStack(7); BlkValueFreeOnStack(6); BlkValueFreeOnStack(5); BlkValueFreeOnStack(4); BlkValueFreeOnStack(3); BlkValueFreeOnStack(2); BlkValueFreeOnStack(1); BlkValueFreeOnStack(0); @pull I7SFRAME; return I7RBLK; ! nothing ]; [ KERNEL_0 ; if (debug_rules) DB_Rule(R_852, 852); ! [2: now activatee is a random number from 1 to 4] (Global_Vars-->17) = R_DecimalNumber(1, 4); ! [3: now furniture is a random number from 1 to 2] (Global_Vars-->18) = R_DecimalNumber(1, 2); ! [4: add switching on right switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy(I7SFRAME, TryAction(0, player, ##SwitchOn, I151_right_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE)))), 0, 0, 0); ! [5: add switching on right switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*2), TryAction(0, player, ##SwitchOn, I151_right_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*3)))), 0, 0, 0); ! [6: add switching on right switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*4), TryAction(0, player, ##SwitchOn, I151_right_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*5)))), 0, 0, 0); ! [7: add switching on left switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*6), TryAction(0, player, ##SwitchOn, I150_left_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*7)))), 0, 0, 0); ! [8: add switching on left switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*8), TryAction(0, player, ##SwitchOn, I150_left_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*9)))), 0, 0, 0); ! [9: add switching on left switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*10), TryAction(0, player, ##SwitchOn, I150_left_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*11)))), 0, 0, 0); ! [10: add switching on right switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*12), TryAction(0, player, ##SwitchOn, I151_right_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*13)))), 0, 0, 0); ! [11: add switching on right switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*14), TryAction(0, player, ##SwitchOn, I151_right_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*15)))), 0, 0, 0); ! [12: add switching on right switch to the light-sequence] LIST_OF_TY_InsertItem((Global_Vars-->14), BlkValueCopy((I7SFRAME+WORDSIZE*16), TryAction(0, player, ##SwitchOn, I151_right_switch, 0, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE*17)))), 0, 0, 0); ! [13: say ~You wake up in a room...[paragraph break]~] say__p=1;! [14: ~You wake up in a room...~] ParaContent(); print "You wake up in a room...";! [15: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say1; .L_SayX1;! [16: wait for any key] KeyPause(); ! [17: say ~You climb to your feet, your vision fuzzy, unable to make out anything distinctive...[paragraph break]~] say__p=1;! [18: ~You climb to your feet, your vision fuzzy, unable to make out anything distinctive...~] ParaContent(); print "You climb to your feet, your vision fuzzy, unable to make out anything distinctive...";! [19: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say2; .L_SayX2;! [20: wait for any key] KeyPause(); ! [21: say ~The white light from above seems to pierce you... you rub your eyes...[paragraph break]~] say__p=1;! [22: ~The white light from above seems to pierce you... you rub your eyes...~] ParaContent(); print "The white light from above seems to pierce you... you rub your eyes...";! [23: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say3; .L_SayX3;! [24: wait for any key] KeyPause(); ! [25: say ~You blink a few times, and the world comes into focus.[paragraph break]~] say__p=1;! [26: ~You blink a few times, and the world comes into focus.~] ParaContent(); print "You blink a few times, and the world comes into focus.";! [27: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say4; .L_SayX4;! [28: wait for any key] KeyPause(); ! [29: if activatee is 1] if ((((Global_Vars-->17) == 1))) {! [30: now the strange machine is in the mysterious room] MoveObject(I142_strange_machine,I128_mysterious_room); } ! [31: if activatee is 2] if ((((Global_Vars-->17) == 2))) {! [32: now the electronic keypad is in the mysterious room] MoveObject(I147_electronic_keypad,I128_mysterious_room); ! [33: now code is a random number from 1000 to 9999] (Global_Vars-->19) = R_DecimalNumber(1000, 9999); } ! [34: if activatee is 3] if ((((Global_Vars-->17) == 3))) {! [35: now a pair of lights is in the mysterious room] MoveObject(I149_pair_of_lights,I128_mysterious_room); } ! [36: if activatee is 4] if ((((Global_Vars-->17) == 4))) {! [37: now the block of ice is in the mysterious room] MoveObject(I153_block_of_ice,I128_mysterious_room); } ! [38: if furniture is 1] if ((((Global_Vars-->18) == 1))) {! [39: now the desk is in the mysterious room] MoveObject(I158_desk,I128_mysterious_room); } ! [40: if furniture is 2] if ((((Global_Vars-->18) == 2))) {! [41: now the table is in the mysterious room] MoveObject(I160_table,I128_mysterious_room); } ! [42: if the strange machine is in the mysterious room or the electronic keypad is in the mysterious room] if ((((I128_mysterious_room == ContainerOf(I142_strange_machine)))) || (((I128_mysterious_room == ContainerOf(I147_electronic_keypad))))) {! [43: now cont is a random number from 1 to 2] (Global_Vars-->21) = R_DecimalNumber(1, 2); ! [44: if the desk is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I158_desk)))) {! [45: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [46: now the slide puzzle box is on the desk] MoveObject(I161_slide_puzzle_box,I158_desk); ! [47: now the hammer is in the drawer] MoveObject(I162_hammer,I159_drawer); } ! [48: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [49: now the wooden box is on the desk] MoveObject(I164_wooden_box,I158_desk); ! [50: now the screwdriver is in the drawer] MoveObject(I165_screwdriver,I159_drawer); } } ! [51: if the table is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I160_table)))) {! [52: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [53: now the slide puzzle box is on the table] MoveObject(I161_slide_puzzle_box,I160_table); ! [54: now the hammer is on the table] MoveObject(I162_hammer,I160_table); } ! [55: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [56: now the wooden box is on the table] MoveObject(I164_wooden_box,I160_table); ! [57: now the screwdriver is on the table] MoveObject(I165_screwdriver,I160_table); } } } ! [58: if a pair of lights is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I149_pair_of_lights)))) {! [59: if the desk is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I158_desk)))) {! [60: now the lockbox is on the desk] MoveObject(I163_lockbox,I158_desk); } ! [61: if the table is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I160_table)))) {! [62: now the lockbox is on the table] MoveObject(I163_lockbox,I160_table); } } ! [63: if the block of ice is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I153_block_of_ice)))) {! [64: now cont is a random number from 1 to 3] (Global_Vars-->21) = R_DecimalNumber(1, 3); ! [65: if the desk is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I158_desk)))) {! [66: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [67: now the slide puzzle box is on the desk] MoveObject(I161_slide_puzzle_box,I158_desk); ! [68: now the hammer is in the drawer] MoveObject(I162_hammer,I159_drawer); } ! [69: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [70: now the lockbox is on the desk] MoveObject(I163_lockbox,I158_desk); ! [71: now an orange berry is in the drawer] MoveObject(I157_orange_berry,I159_drawer); } ! [72: if cont is 3] if ((((Global_Vars-->21) == 3))) {! [73: now the wooden box is on the desk] MoveObject(I164_wooden_box,I158_desk); ! [74: now the screwdriver is in the drawer] MoveObject(I165_screwdriver,I159_drawer); } } ! [75: if the table is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I160_table)))) {! [76: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [77: now the slide puzzle box is on the table] MoveObject(I161_slide_puzzle_box,I160_table); ! [78: now the hammer is on the table] MoveObject(I162_hammer,I160_table); } ! [79: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [80: now the lockbox is on the table] MoveObject(I163_lockbox,I160_table); ! [81: now an orange berry is on the table] MoveObject(I157_orange_berry,I160_table); } ! [82: if cont is 3] if ((((Global_Vars-->21) == 3))) {! [83: now the wooden box is on the table] MoveObject(I164_wooden_box,I160_table); ! [84: now the screwdriver is on the table] MoveObject(I165_screwdriver,I160_table); } } } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: When play ends (B5_when_play_ends) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! When play ends: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! When play ends: [ R_911 ; if (debug_rules) DB_Rule(R_911, 911); ! [2: say ~[bold type]***You have uncovered the awful truth...***[roman type]~] say__p=1;! [3: bold type] ParaContent(); style bold;! [4: ~***You have uncovered the awful truth...***~] ParaContent(); print "***You have uncovered the awful truth...***";! [5: roman type] ParaContent(); style roman; .L_Say5; .L_SayX5;rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: When scene begins (B6_when_scene_begins) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! When a scene ( called the event ) begins ( this is the scene description text rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! When a scene ( called the event ) begins ( this is the scene description text rule ): [ R_65 tmp_0 ! Let/loop value, e.g., 'event': scene ; if ((((tmp_0 = parameter_value, (((true) && (tmp_0=(parameter_value), true))))) || (tmp_0 = I78_entire_game,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_65, 65); ! [2: if the description of the event is not ~~] if (((~~(( BlkValueCompare(GProperty(SCENE_TY, tmp_0,description), EMPTY_TEXT_VALUE) == 0))))) {! [3: say ~[description of the event][paragraph break]~] say__p=1;! [4: description of the event] ParaContent(); @push self; print (TEXT_TY_Say) GProperty(SCENE_TY, self=tmp_0,description);@pull self; ! [5: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say6; .L_SayX6;} } else if (debug_rules > 1) DB_Rule(R_65, 65, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Every turn (B8_every_turn) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Every turn when the player is in the Mysterious Room and SOS is 0: ! >>> III - When/while requirement >>> ! Rule 2/3 ! Every turn when the player is in the Mysterious Room: ! >>> I - Number of aspects constrained >>> ! Rule 3/3 ! Every turn: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Every turn when the player is in the Mysterious Room and SOS is 0: [ R_878 I7RBLK; @push I7SFRAME; StackFrameCreate(2); BlkValueCreateOnStack(1, STORED_ACTION_TY); BlkValueCreateOnStack(0, STORED_ACTION_TY); I7RBLK = KERNEL_1(); BlkValueFreeOnStack(1); BlkValueFreeOnStack(0); @pull I7SFRAME; return I7RBLK; ! nothing ]; [ KERNEL_1 ; if (((((((I128_mysterious_room == ContainerOf(player)))) && ((((Global_Vars-->16) == 0))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_878, 878); ! [2: truncate the attempted-sequence to the last eight entries] LIST_OF_TY_SetLength((Global_Vars-->15), 8, -1, -1); ! [3: add the current action to the attempted-sequence] LIST_OF_TY_InsertItem((Global_Vars-->15), BlkValueCopy(I7SFRAME, STORED_ACTION_TY_Current((I7SFRAME+WORDSIZE))), 0, 0, 0); ! [4: if the attempted-sequence is the light-sequence] if ((( BlkValueCompare((Global_Vars-->15), (Global_Vars-->14)) == 0))) {! [5: if the lockbox is on the desk or the lockbox is on the table] if ((((I158_desk == SupporterOf(I163_lockbox)))) || (((I160_table == SupporterOf(I163_lockbox))))) {! [6: say ~Abruptly, a slot opens up in the wall and a key flies out. You manage to catch it as the slot disappears into the wall.~] say__p=1;! [7: ~Abruptly, a slot opens up in the wall and a key flies out. You manage to catch it as the slot disappears into the wall.~] ParaContent(); print "Abruptly, a slot opens up in the wall and a key flies out. You manage to catch it as the slot disappears into the wall."; new_line; .L_Say7; .L_SayX7;! [8: now the player is carrying the wide key] MoveObject(I146_wide_key,player); ! [9: now sos is 1] (Global_Vars-->16) = 1; } ! [10: if the slide puzzle box is on the desk or the slide puzzle box is on the table] if ((((I158_desk == SupporterOf(I161_slide_puzzle_box)))) || (((I160_table == SupporterOf(I161_slide_puzzle_box))))) {! [11: say ~Abruptly, a slot opens up in the wall and a hammer falls out. It drops onto the floor with a thunk, and the slot immediately disappears.~] say__p=1;! [12: ~Abruptly, a slot opens up in the wall and a hammer falls out. It drops onto the floor with a thunk, and the slot immediately disappears.~] ParaContent(); print "Abruptly, a slot opens up in the wall and a hammer falls out. It drops onto the floor with a thunk, and the slot immediately disappears."; new_line; .L_Say8; .L_SayX8;! [13: now the hammer is in the mysterious room] MoveObject(I162_hammer,I128_mysterious_room); ! [14: now sos is 1] (Global_Vars-->16) = 1; } ! [15: if the wooden box is on the desk or the wooden box is on the table] if ((((I158_desk == SupporterOf(I164_wooden_box)))) || (((I160_table == SupporterOf(I164_wooden_box))))) {! [16: say ~Abruptly, a slot opens up in the wall and a screwdriver falls out. It drops onto the floor with a plink, and the slot immediately disappears.~] say__p=1;! [17: ~Abruptly, a slot opens up in the wall and a screwdriver falls out. It drops onto the floor with a plink, and the slot immediately disappears.~] ParaContent(); print "Abruptly, a slot opens up in the wall and a screwdriver falls out. It drops onto the floor with a plink, and the slot immediately disappears."; new_line; .L_Say9; .L_SayX9;! [18: now the screwdriver is in the mysterious room] MoveObject(I165_screwdriver,I128_mysterious_room); ! [19: now sos is 1] (Global_Vars-->16) = 1; } } } else if (debug_rules > 1) DB_Rule(R_878, 878, 'context'); rfalse; ]; ! No specific request ! Every turn when the player is in the Mysterious Room: [ R_853 ; if ((((((I128_mysterious_room == ContainerOf(player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_853, 853); ! [2: if a random chance of 1 in 10 succeeds] if (((GenerateRandomNumber(1, 10) <= 1))) {! [3: say ~[one of]You wonder how you got here.[or]You struggle to remember how you got here.[or]You try to remember what happened before you wound up here, but to no avail.[or]A memory flits through your mind, but disappears before you can grasp anything concrete.[or]You can't even remember your own name right now.[or]You wonder who kidnapped you and put you here.[or]You wonder what kind of person would force strangers through puzzle rooms.[or]You vaguely feel like you're being watched.[or]You panic for a moment as you try to remember if you left the oven on.[as decreasingly likely outcomes]~] say__p=1;! [4: one of] ParaContent(); if (I7_ST_say_one_flag-->0 == false) { I7_ST_say_one_of-->0 = i7_soo_tap(I7_ST_say_one_of-->0, 9); I7_ST_say_one_flag-->0 = true; } if (say__comp == false) I7_ST_say_one_flag-->0 = false; switch ((I7_ST_say_one_of-->0)%(9+1)-1) { 0:! [5: ~You wonder how you got here.~] ParaContent(); print "You wonder how you got here."; new_line;! [6: or] ParaContent(); @nop; 1:! [7: ~You struggle to remember how you got here.~] ParaContent(); print "You struggle to remember how you got here."; new_line;! [8: or] ParaContent(); @nop; 2:! [9: ~You try to remember what happened before you wound up here, but to no avail.~] ParaContent(); print "You try to remember what happened before you wound up here, but to no avail."; new_line;! [10: or] ParaContent(); @nop; 3:! [11: ~A memory flits through your mind, but disappears before you can grasp anything concrete.~] ParaContent(); print "A memory flits through your mind, but disappears before you can grasp anything concrete."; new_line;! [12: or] ParaContent(); @nop; 4:! [13: ~You can't even remember your own name right now.~] ParaContent(); print "You can't even remember your own name right now."; new_line;! [14: or] ParaContent(); @nop; 5:! [15: ~You wonder who kidnapped you and put you here.~] ParaContent(); print "You wonder who kidnapped you and put you here."; new_line;! [16: or] ParaContent(); @nop; 6:! [17: ~You wonder what kind of person would force strangers through puzzle rooms.~] ParaContent(); print "You wonder what kind of person would force strangers through puzzle rooms."; new_line;! [18: or] ParaContent(); @nop; 7:! [19: ~You vaguely feel like you're being watched.~] ParaContent(); print "You vaguely feel like you're being watched."; new_line;! [20: or] ParaContent(); @nop; 8:! [21: ~You panic for a moment as you try to remember if you left the oven on.~] ParaContent(); print "You panic for a moment as you try to remember if you left the oven on."; new_line;! [22: as decreasingly likely outcomes] ParaContent(); } .L_Say10; .L_SayX10;} ! [23: if a random chance of 1 in 15 succeeds] if (((GenerateRandomNumber(1, 15) <= 1))) {! [24: say ~[one of]You think you hear a faraway rumble.[or][stopping]~] say__p=1;! [25: one of] ParaContent(); if (I7_ST_say_one_flag-->1 == false) { I7_ST_say_one_of-->1 = i7_soo_stop(I7_ST_say_one_of-->1, 2); I7_ST_say_one_flag-->1 = true; } if (say__comp == false) I7_ST_say_one_flag-->1 = false; switch ((I7_ST_say_one_of-->1)%(2+1)-1) { 0:! [26: ~You think you hear a faraway rumble.~] ParaContent(); print "You think you hear a faraway rumble."; new_line;! [27: or] ParaContent(); @nop; 1:! [28: stopping] ParaContent(); } .L_Say11; .L_SayX11;} } else if (debug_rules > 1) DB_Rule(R_853, 853, 'context'); rfalse; ]; ! No specific request ! Every turn: [ R_910 ; if (debug_rules) DB_Rule(R_910, 910); ! [2: if conversation is 1] if ((((Global_Vars-->23) == 1))) {! [3: if rooms cleared is 0] if ((((Global_Vars-->22) == 0))) {! [4: say ~The man examines you impassively for a moment, then manages a faint smile. 'Well, well, well,' he says. 'You saw right through the illusion. Fine job, [italic type]damn[roman type] fine job.'[paragraph break]'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...[paragraph break]'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'[paragraph break]'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.[paragraph break]Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.[paragraph break]The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.[paragraph break]'I'll have to think about it, Commander,' he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, [italic type]NOW[roman type]. [paragraph break]>~] say__p=1;! [5: ~The man examines you impassively for a moment, then manages a faint smile. 'Well, well, well,' he says. 'You saw right through the illusion. Fine job, ~] ParaContent(); print "The man examines you impassively for a moment, then manages a faint smile. ~Well, well, well,~ he says. ~You saw right through the illusion. Fine job, ";! [6: italic type] ParaContent(); style underline;! [7: ~damn~] ParaContent(); print "damn";! [8: roman type] ParaContent(); style roman;! [9: ~ fine job.'~] ParaContent(); print " fine job.~";! [10: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [11: ~'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...~] ParaContent(); print "~You see how our technology works, General,~ says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...";! [12: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [13: ~'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'~] ParaContent(); print "~Oh yes, yes,~ replies the man, turning to the astronaut. ~Your technology is extremely impressive, and I think we can put it to excellent use.~";! [14: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [15: ~'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.~] ParaContent(); print "~That is well,~ says the astronaut. ~But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.~ ~You've had plenty of subjects,~ says the man coolly. ~That is true,~ replies the astronaut. ~But we have not yet had a female subject,~ he says nodding in your direction.";! [16: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [17: ~Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.~] ParaContent(); print "Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.";! [18: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [19: ~The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.~] ParaContent(); print "The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.";! [20: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [21: ~'I'll have to think about it, Commander,' he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, ~] ParaContent(); print "~I'll have to think about it, Commander,~ he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, ";! [22: italic type] ParaContent(); style underline;! [23: ~NOW~] ParaContent(); print "NOW";! [24: roman type] ParaContent(); style roman;! [25: ~. ~] ParaContent(); print ". ";! [26: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [27: ~>~] ParaContent(); print ">"; .L_Say12; .L_SayX12;} else { ! [28: if rooms cleared is greater than 0 and rooms cleared is less than 4] if (((((Global_Vars-->22) > 0))) && ((((Global_Vars-->22) < 4)))) {! [29: say ~The man examines you impassively for a moment, then manages a faint smile. 'Well, well, well,' he says. 'You did pretty well. Just needed a little nudge to see through the illusion. Damn fine job.'[paragraph break]'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...[paragraph break]'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'[paragraph break]'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.[paragraph break]Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.[paragraph break]The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.[paragraph break]'I'll have to sleep on it, Commander,' he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, [italic type]NOW[roman type]. [paragraph break]>~] say__p=1;! [30: ~The man examines you impassively for a moment, then manages a faint smile. 'Well, well, well,' he says. 'You did pretty well. Just needed a little nudge to see through the illusion. Damn fine job.'~] ParaContent(); print "The man examines you impassively for a moment, then manages a faint smile. ~Well, well, well,~ he says. ~You did pretty well. Just needed a little nudge to see through the illusion. Damn fine job.~";! [31: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [32: ~'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...~] ParaContent(); print "~You see how our technology works, General,~ says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...";! [33: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [34: ~'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'~] ParaContent(); print "~Oh yes, yes,~ replies the man, turning to the astronaut. ~Your technology is extremely impressive, and I think we can put it to excellent use.~";! [35: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [36: ~'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.~] ParaContent(); print "~That is well,~ says the astronaut. ~But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.~ ~You've had plenty of subjects,~ says the man coolly. ~That is true,~ replies the astronaut. ~But we have not yet had a female subject,~ he says nodding in your direction.";! [37: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [38: ~Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.~] ParaContent(); print "Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.";! [39: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [40: ~The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.~] ParaContent(); print "The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.";! [41: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [42: ~'I'll have to sleep on it, Commander,' he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, ~] ParaContent(); print "~I'll have to sleep on it, Commander,~ he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, ";! [43: italic type] ParaContent(); style underline;! [44: ~NOW~] ParaContent(); print "NOW";! [45: roman type] ParaContent(); style roman;! [46: ~. ~] ParaContent(); print ". ";! [47: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [48: ~>~] ParaContent(); print ">"; .L_Say13; .L_SayX13;} else { ! [49: if rooms cleared is greater than 3 and rooms cleared is less than 8] if (((((Global_Vars-->22) > 3))) && ((((Global_Vars-->22) < 8)))) {! [50: say ~The man examines you impassively for a moment, then nods. 'Well,' he says, 'You didn't do too bad. You needed a little help, but you figured things out eventually. Decent enough, I suppose.'[paragraph break]'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...[paragraph break]'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'[paragraph break]'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.[paragraph break]Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.[paragraph break]The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.[paragraph break]'I'll have to sleep on it, Commander,' he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, [italic type]NOW[roman type]. [paragraph break]>~] say__p=1;! [51: ~The man examines you impassively for a moment, then nods. 'Well,' he says, 'You didn't do too bad. You needed a little help, but you figured things out eventually. Decent enough, I suppose.'~] ParaContent(); print "The man examines you impassively for a moment, then nods. ~Well,~ he says, ~You didn't do too bad. You needed a little help, but you figured things out eventually. Decent enough, I suppose.~";! [52: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [53: ~'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...~] ParaContent(); print "~You see how our technology works, General,~ says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...";! [54: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [55: ~'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'~] ParaContent(); print "~Oh yes, yes,~ replies the man, turning to the astronaut. ~Your technology is extremely impressive, and I think we can put it to excellent use.~";! [56: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [57: ~'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.~] ParaContent(); print "~That is well,~ says the astronaut. ~But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.~ ~You've had plenty of subjects,~ says the man coolly. ~That is true,~ replies the astronaut. ~But we have not yet had a female subject,~ he says nodding in your direction.";! [58: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [59: ~Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.~] ParaContent(); print "Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.";! [60: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [61: ~The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.~] ParaContent(); print "The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.";! [62: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [63: ~'I'll have to sleep on it, Commander,' he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, ~] ParaContent(); print "~I'll have to sleep on it, Commander,~ he says unhappily. Maybe he won't give you to the aliens, but you somehow doubt he'll just let you waltz on out of here. You need to get out of here, ";! [64: italic type] ParaContent(); style underline;! [65: ~NOW~] ParaContent(); print "NOW";! [66: roman type] ParaContent(); style roman;! [67: ~. ~] ParaContent(); print ". ";! [68: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [69: ~>~] ParaContent(); print ">"; .L_Say14; .L_SayX14;} else { ! [70: if rooms cleared is greater than 7 and rooms cleared is less than 13] if (((((Global_Vars-->22) > 7))) && ((((Global_Vars-->22) < 13)))) {! [71: say ~The man examines you for a moment, then says, 'Not the worst we've seen. Needed a lot of help, a lot of time to think... certainly not the best either,' he finishes with a mutter, turning his gaze to the floor.[paragraph break]'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...[paragraph break]'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'[paragraph break]'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.[paragraph break]Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.[paragraph break]The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.[paragraph break]'She'll be all yours as soon as you're ready for her, Commander,' he says indifferently.[paragraph break]Dammit, this bastard's going to let the aliens shove needles into you. You need to get out of here, [italic type]NOW[roman type]. [paragraph break]>~] say__p=1;! [72: ~The man examines you for a moment, then says, 'Not the worst we've seen. Needed a lot of help, a lot of time to think... certainly not the best either,' he finishes with a mutter, turning his gaze to the floor.~] ParaContent(); print "The man examines you for a moment, then says, ~Not the worst we've seen. Needed a lot of help, a lot of time to think... certainly not the best either,~ he finishes with a mutter, turning his gaze to the floor.";! [73: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [74: ~'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...~] ParaContent(); print "~You see how our technology works, General,~ says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...";! [75: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [76: ~'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'~] ParaContent(); print "~Oh yes, yes,~ replies the man, turning to the astronaut. ~Your technology is extremely impressive, and I think we can put it to excellent use.~";! [77: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [78: ~'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.~] ParaContent(); print "~That is well,~ says the astronaut. ~But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.~ ~You've had plenty of subjects,~ says the man coolly. ~That is true,~ replies the astronaut. ~But we have not yet had a female subject,~ he says nodding in your direction.";! [79: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [80: ~Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.~] ParaContent(); print "Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.";! [81: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [82: ~The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.~] ParaContent(); print "The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.";! [83: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [84: ~'She'll be all yours as soon as you're ready for her, Commander,' he says indifferently.~] ParaContent(); print "~She'll be all yours as soon as you're ready for her, Commander,~ he says indifferently.";! [85: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [86: ~Dammit, this bastard's going to let the aliens shove needles into you. You need to get out of here, ~] ParaContent(); print "Dammit, this bastard's going to let the aliens shove needles into you. You need to get out of here, ";! [87: italic type] ParaContent(); style underline;! [88: ~NOW~] ParaContent(); print "NOW";! [89: roman type] ParaContent(); style roman;! [90: ~. ~] ParaContent(); print ". ";! [91: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [92: ~>~] ParaContent(); print ">"; .L_Say15; .L_SayX15;} else { ! [93: if rooms cleared is greater than 12 and rooms cleared is less than 21] if (((((Global_Vars-->22) > 12))) && ((((Global_Vars-->22) < 21)))) {! [94: say ~The man looks over you with something close to contempt on his face. 'Pathetic,' he says, almost spitting the word. 'Practically needed to walk in there and tell you what was up. Took you forever to figure out what was going on. I can only remember seeing a couple people do it as slow as you.' He sits down, shaking his head.[paragraph break]'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...[paragraph break]'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'[paragraph break]'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.[paragraph break]Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.[paragraph break]The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.[paragraph break]'She's all yours, Commander, just as soon as you say the word,' he says. [paragraph break]Dammit, this bastard's going to let the aliens shove needles into you. You need to get out of here, [italic type]NOW[roman type]. [paragraph break]>~] say__p=1;! [95: ~The man looks over you with something close to contempt on his face. 'Pathetic,' he says, almost spitting the word. 'Practically needed to walk in there and tell you what was up. Took you forever to figure out what was going on. I can only remember seeing a couple people do it as slow as you.' He sits down, shaking his head.~] ParaContent(); print "The man looks over you with something close to contempt on his face. ~Pathetic,~ he says, almost spitting the word. ~Practically needed to walk in there and tell you what was up. Took you forever to figure out what was going on. I can only remember seeing a couple people do it as slow as you.~ He sits down, shaking his head.";! [96: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [97: ~'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...~] ParaContent(); print "~You see how our technology works, General,~ says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...";! [98: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [99: ~'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'~] ParaContent(); print "~Oh yes, yes,~ replies the man, turning to the astronaut. ~Your technology is extremely impressive, and I think we can put it to excellent use.~";! [100: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [101: ~'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.~] ParaContent(); print "~That is well,~ says the astronaut. ~But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.~ ~You've had plenty of subjects,~ says the man coolly. ~That is true,~ replies the astronaut. ~But we have not yet had a female subject,~ he says nodding in your direction.";! [102: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [103: ~Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.~] ParaContent(); print "Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.";! [104: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [105: ~The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.~] ParaContent(); print "The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.";! [106: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [107: ~'She's all yours, Commander, just as soon as you say the word,' he says. ~] ParaContent(); print "~She's all yours, Commander, just as soon as you say the word,~ he says. ";! [108: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [109: ~Dammit, this bastard's going to let the aliens shove needles into you. You need to get out of here, ~] ParaContent(); print "Dammit, this bastard's going to let the aliens shove needles into you. You need to get out of here, ";! [110: italic type] ParaContent(); style underline;! [111: ~NOW~] ParaContent(); print "NOW";! [112: roman type] ParaContent(); style roman;! [113: ~. ~] ParaContent(); print ". ";! [114: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [115: ~>~] ParaContent(); print ">"; .L_Say16; .L_SayX16;} else { ! [116: say ~The man glances at you for a moment with disgust on his face, then looks away. 'Pathetic,' he says, shaking his head. 'Practically needed to walk in there and tell you what was up. Can't remember anyone taking so long to figure it out.' He sits down.[paragraph break]'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...[paragraph break]'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'[paragraph break]'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.[paragraph break]Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.[paragraph break]The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.[paragraph break]'Please, take her,' says the man, waving dismissively. 'I doubt she'll be any loss to Earth.'[paragraph break]Dammit, this bastard's going to let the aliens shove needles into you. And for what, just because you couldn't figure out someone had invented a holodeck? You need to get out of here, [italic type]NOW[roman type]. [paragraph break]>~] say__p=1;! [117: ~The man glances at you for a moment with disgust on his face, then looks away. 'Pathetic,' he says, shaking his head. 'Practically needed to walk in there and tell you what was up. Can't remember anyone taking so long to figure it out.' He sits down.~] ParaContent(); print "The man glances at you for a moment with disgust on his face, then looks away. ~Pathetic,~ he says, shaking his head. ~Practically needed to walk in there and tell you what was up. Can't remember anyone taking so long to figure it out.~ He sits down.";! [118: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [119: ~'You see how our technology works, General,' says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...~] ParaContent(); print "~You see how our technology works, General,~ says a voice that sounds like Darth Vader. With a jolt, you realize the astronaut must've spoken. And then you realize what he just said must mean...";! [120: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [121: ~'Oh yes, yes,' replies the man, turning to the astronaut. 'Your technology is extremely impressive, and I think we can put it to excellent use.'~] ParaContent(); print "~Oh yes, yes,~ replies the man, turning to the astronaut. ~Your technology is extremely impressive, and I think we can put it to excellent use.~";! [122: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [123: ~'That is well,' says the astronaut. 'But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.' 'You've had plenty of subjects,' says the man coolly. 'That is true,' replies the astronaut. 'But we have not yet had a female subject,' he says nodding in your direction.~] ParaContent(); print "~That is well,~ says the astronaut. ~But there is still the matter of compensation for the delivery of our technology. We wish to have more test subjects of your species. For our own scientific knowledge.~ ~You've had plenty of subjects,~ says the man coolly. ~That is true,~ replies the astronaut. ~But we have not yet had a female subject,~ he says nodding in your direction.";! [124: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [125: ~Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.~] ParaContent(); print "Your eyes widen in horror as it all comes together. This is a government facility, that kidnapped you, to test alien technology on you, and now they're going to give you to the aliens to stick needles in you or God knows what.";! [126: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [127: ~The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.~] ParaContent(); print "The man turns back to look at you, and you stare at him, as if pleading for mercy, as if this bastard has any mercy.";! [128: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [129: ~'Please, take her,' says the man, waving dismissively. 'I doubt she'll be any loss to Earth.'~] ParaContent(); print "~Please, take her,~ says the man, waving dismissively. ~I doubt she'll be any loss to Earth.~";! [130: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [131: ~Dammit, this bastard's going to let the aliens shove needles into you. And for what, just because you couldn't figure out someone had invented a holodeck? You need to get out of here, ~] ParaContent(); print "Dammit, this bastard's going to let the aliens shove needles into you. And for what, just because you couldn't figure out someone had invented a holodeck? You need to get out of here, ";! [132: italic type] ParaContent(); style underline;! [133: ~NOW~] ParaContent(); print "NOW";! [134: roman type] ParaContent(); style roman;! [135: ~. ~] ParaContent(); print ". ";! [136: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [137: ~>~] ParaContent(); print ">"; .L_Say17; .L_SayX17;} } } } } ! [138: wait for any key] KeyPause(); ! [139: say ~[paragraph break]Before you can even think of what to do next, the wooden door bursts open and a group of men in clad in riot gear and wielding batons rush into the room and grab you, manhandling you like you were nothing more than a sack of potatoes. You try to fight back, but it's no use at all. You never had any chance to escape at all, you realize. The thought almost makes you want to cry.[paragraph break]One of the soldiers produces a syringe with a clear fluid. You flail desperately to keep him from injecting what must be poison, but the other men hold you in place and the soldier pricks you with the needle.[paragraph break]The sting of the needle feels familiar[unicode 8230][paragraph break]~] say__p=1;! [140: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [141: ~Before you can even think of what to do next, the wooden door bursts open and a group of men in clad in riot gear and wielding batons rush into the room and grab you, manhandling you like you were nothing more than a sack of potatoes. You try to fight back, but it's no use at all. You never had any chance to escape at all, you realize. The thought almost makes you want to cry.~] ParaContent(); print "Before you can even think of what to do next, the wooden door bursts open and a group of men in clad in riot gear and wielding batons rush into the room and grab you, manhandling you like you were nothing more than a sack of potatoes. You try to fight back, but it's no use at all. You never had any chance to escape at all, you realize. The thought almost makes you want to cry.";! [142: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [143: ~One of the soldiers produces a syringe with a clear fluid. You flail desperately to keep him from injecting what must be poison, but the other men hold you in place and the soldier pricks you with the needle.~] ParaContent(); print "One of the soldiers produces a syringe with a clear fluid. You flail desperately to keep him from injecting what must be poison, but the other men hold you in place and the soldier pricks you with the needle.";! [144: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [145: ~The sting of the needle feels familiar~] ParaContent(); print "The sting of the needle feels familiar";! [146: unicode 8230] ParaContent(); unicode_temp = 8230; #ifdef TARGET_ZCODE; @print_unicode unicode_temp; #ifnot; @streamunichar unicode_temp; #endif;! [147: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say18; .L_SayX18;! [148: wait for any key] KeyPause(); ! [149: say ~Suddenly all your memories come flooding back...~] say__p=1;! [150: ~Suddenly all your memories come flooding back...~] ParaContent(); print "Suddenly all your memories come flooding back..."; new_line; .L_Say19; .L_SayX19;! [151: wait for any key] KeyPause(); ! [152: clear the screen] VM_ClearScreen(0); ! [153: now the left hand status line is ~~] BlkValueCopy(left_hand_status_line, EMPTY_TEXT_VALUE); ! [154: say ~[line break][bold type]Your Apartment[roman type][line break]You've finished packing all your stuff for the camping trip. A few days of food, a chair, a backpack, a bunch of water bottles, some sunscreen, bug spray, a sleeping bag. Although with your boyfriend coming along, you're not sure how much sleep you'll be getting in.[paragraph break]Even without that, you'd be looking forward to this trip. Spending four days with your three best friends, enjoying the fresh air and the great outdoors[unicode 8230][paragraph break]You hear the door open behind you. Your boyfriend, Matt, enters the room.[paragraph break]You smile, and you approach each other, and share a brief kiss.[paragraph break]>~] say__p=1;! [155: line break] ParaContent(); new_line;! [156: bold type] ParaContent(); style bold;! [157: ~Your Apartment~] ParaContent(); print "Your Apartment";! [158: roman type] ParaContent(); style roman;! [159: line break] ParaContent(); new_line;! [160: ~You've finished packing all your stuff for the camping trip. A few days of food, a chair, a backpack, a bunch of water bottles, some sunscreen, bug spray, a sleeping bag. Although with your boyfriend coming along, you're not sure how much sleep you'll be getting in.~] ParaContent(); print "You've finished packing all your stuff for the camping trip. A few days of food, a chair, a backpack, a bunch of water bottles, some sunscreen, bug spray, a sleeping bag. Although with your boyfriend coming along, you're not sure how much sleep you'll be getting in.";! [161: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [162: ~Even without that, you'd be looking forward to this trip. Spending four days with your three best friends, enjoying the fresh air and the great outdoors~] ParaContent(); print "Even without that, you'd be looking forward to this trip. Spending four days with your three best friends, enjoying the fresh air and the great outdoors";! [163: unicode 8230] ParaContent(); unicode_temp = 8230; #ifdef TARGET_ZCODE; @print_unicode unicode_temp; #ifnot; @streamunichar unicode_temp; #endif;! [164: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [165: ~You hear the door open behind you. Your boyfriend, Matt, enters the room.~] ParaContent(); print "You hear the door open behind you. Your boyfriend, Matt, enters the room.";! [166: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [167: ~You smile, and you approach each other, and share a brief kiss.~] ParaContent(); print "You smile, and you approach each other, and share a brief kiss.";! [168: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [169: ~>~] ParaContent(); print ">"; .L_Say20; .L_SayX20;! [170: wait for any key] KeyPause(); ! [171: say ~Talk to Matt[paragraph break]'Are you all packed, babe?' you ask him. He smiles and replies, 'Yep. Only thing left is you.'[paragraph break]You giggle in reply, feeling kinda silly but also kinda free, free to share affection with the person you love most in the world.[paragraph break]>~] say__p=1;! [172: ~Talk to Matt~] ParaContent(); print "Talk to Matt";! [173: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [174: ~'Are you all packed, babe?' you ask him. He smiles and replies, 'Yep. Only thing left is you.'~] ParaContent(); print "~Are you all packed, babe?~ you ask him. He smiles and replies, ~Yep. Only thing left is you.~";! [175: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [176: ~You giggle in reply, feeling kinda silly but also kinda free, free to share affection with the person you love most in the world.~] ParaContent(); print "You giggle in reply, feeling kinda silly but also kinda free, free to share affection with the person you love most in the world.";! [177: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [178: ~>~] ParaContent(); print ">"; .L_Say21; .L_SayX21;! [179: wait for any key] KeyPause(); ! [180: say ~Leave apartment[paragraph break]You gather your things, make sure the oven's off, close the door, lock it, and set off on your trip, hand in hand with Matt.~] say__p=1;! [181: ~Leave apartment~] ParaContent(); print "Leave apartment";! [182: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [183: ~You gather your things, make sure the oven's off, close the door, lock it, and set off on your trip, hand in hand with Matt.~] ParaContent(); print "You gather your things, make sure the oven's off, close the door, lock it, and set off on your trip, hand in hand with Matt."; new_line; .L_Say22; .L_SayX22;! [184: wait for any key] KeyPause(); ! [185: clear the screen] VM_ClearScreen(0); ! [186: say ~[line break][bold type]Car[roman type][line break]You're in the backseat of Bryan's car, cuddling in the back with Matt. You love his smile, and you love smiling back. This is definitely going to be the best trip ever.[paragraph break]Bryan is up front driving, with his girlfriend Selena riding shotgun.[paragraph break]The view of the forest cruises by.[paragraph break]>~] say__p=1;! [187: line break] ParaContent(); new_line;! [188: bold type] ParaContent(); style bold;! [189: ~Car~] ParaContent(); print "Car";! [190: roman type] ParaContent(); style roman;! [191: line break] ParaContent(); new_line;! [192: ~You're in the backseat of Bryan's car, cuddling in the back with Matt. You love his smile, and you love smiling back. This is definitely going to be the best trip ever.~] ParaContent(); print "You're in the backseat of Bryan's car, cuddling in the back with Matt. You love his smile, and you love smiling back. This is definitely going to be the best trip ever.";! [193: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [194: ~Bryan is up front driving, with his girlfriend Selena riding shotgun.~] ParaContent(); print "Bryan is up front driving, with his girlfriend Selena riding shotgun.";! [195: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [196: ~The view of the forest cruises by.~] ParaContent(); print "The view of the forest cruises by.";! [197: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [198: ~>~] ParaContent(); print ">"; .L_Say23; .L_SayX23;! [199: wait for any key] KeyPause(); ! [200: say ~Look at window[paragraph break]You look out the window, taking in the majesty of the mountains, the beauty of the trees, the mystery of the underbrush. You wonder if you'll get lucky and see a deer, maybe even a big buck.[paragraph break]'Man, it's a good thing I brought along some allergy spray,' you hear Matt mutter as he looks out the other window. You look back at him. 'Why?' you ask.[paragraph break]He points at the window. 'Look at these windows, they're covered in pollen,' he says. You look closely at the window, and you can see it does have a very fine layer of yellow dust. 'That's the kind of thing I love about you,' you say to him, almost laughing in delight at having found someone so sharp, so observant to spend your life with. Because that's something you have no doubt about, can't have any doubt about when you look in his eyes[unicode 8230][paragraph break]'Hey, can you two wait til we pitch a tent before you start making out?' calls Bryan from the front seat. You and Matt laugh, and Selene looks back at you with a hint of a smile...~] say__p=1;! [201: ~Look at window~] ParaContent(); print "Look at window";! [202: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [203: ~You look out the window, taking in the majesty of the mountains, the beauty of the trees, the mystery of the underbrush. You wonder if you'll get lucky and see a deer, maybe even a big buck.~] ParaContent(); print "You look out the window, taking in the majesty of the mountains, the beauty of the trees, the mystery of the underbrush. You wonder if you'll get lucky and see a deer, maybe even a big buck.";! [204: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [205: ~'Man, it's a good thing I brought along some allergy spray,' you hear Matt mutter as he looks out the other window. You look back at him. 'Why?' you ask.~] ParaContent(); print "~Man, it's a good thing I brought along some allergy spray,~ you hear Matt mutter as he looks out the other window. You look back at him. ~Why?~ you ask.";! [206: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [207: ~He points at the window. 'Look at these windows, they're covered in pollen,' he says. You look closely at the window, and you can see it does have a very fine layer of yellow dust. 'That's the kind of thing I love about you,' you say to him, almost laughing in delight at having found someone so sharp, so observant to spend your life with. Because that's something you have no doubt about, can't have any doubt about when you look in his eyes~] ParaContent(); print "He points at the window. ~Look at these windows, they're covered in pollen,~ he says. You look closely at the window, and you can see it does have a very fine layer of yellow dust. ~That's the kind of thing I love about you,~ you say to him, almost laughing in delight at having found someone so sharp, so observant to spend your life with. Because that's something you have no doubt about, can't have any doubt about when you look in his eyes";! [208: unicode 8230] ParaContent(); unicode_temp = 8230; #ifdef TARGET_ZCODE; @print_unicode unicode_temp; #ifnot; @streamunichar unicode_temp; #endif;! [209: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [210: ~'Hey, can you two wait til we pitch a tent before you start making out?' calls Bryan from the front seat. You and Matt laugh, and Selene looks back at you with a hint of a smile...~] ParaContent(); print "~Hey, can you two wait til we pitch a tent before you start making out?~ calls Bryan from the front seat. You and Matt laugh, and Selene looks back at you with a hint of a smile..."; new_line; .L_Say24; .L_SayX24;! [211: wait for any key] KeyPause(); ! [212: clear the screen] VM_ClearScreen(0); ! [213: say ~[line break][bold type]Campsite, Day[roman type][line break]You and your friends spent the afternoon hiking up, and found this awesome spot with plenty of room for your tents and a fire and a great view of the mountains. It even overlooks the city, looking very far away.[paragraph break]You set up your tents, got all your gear out, but by then the sun was getting low in the sky and you were all kind of tired, so you decided not to do any exploring.[paragraph break]You did manage to light a fire though, and that's what you and Matt were sitting together, staring into as the stars came out.[paragraph break]Matt stands up with a yawn. 'I'm going to bed, honey,' he says. 'Don't know how long you wanna stay up.'[paragraph break]'I'll join you soon, baby,' you reply, giving his hand a kiss before he turns in.[paragraph break]You go back to staring at the fire, letting your mind unwind a little.[paragraph break]>~] say__p=1;! [214: line break] ParaContent(); new_line;! [215: bold type] ParaContent(); style bold;! [216: ~Campsite, Day~] ParaContent(); print "Campsite, Day";! [217: roman type] ParaContent(); style roman;! [218: line break] ParaContent(); new_line;! [219: ~You and your friends spent the afternoon hiking up, and found this awesome spot with plenty of room for your tents and a fire and a great view of the mountains. It even overlooks the city, looking very far away.~] ParaContent(); print "You and your friends spent the afternoon hiking up, and found this awesome spot with plenty of room for your tents and a fire and a great view of the mountains. It even overlooks the city, looking very far away.";! [220: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [221: ~You set up your tents, got all your gear out, but by then the sun was getting low in the sky and you were all kind of tired, so you decided not to do any exploring.~] ParaContent(); print "You set up your tents, got all your gear out, but by then the sun was getting low in the sky and you were all kind of tired, so you decided not to do any exploring.";! [222: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [223: ~You did manage to light a fire though, and that's what you and Matt were sitting together, staring into as the stars came out.~] ParaContent(); print "You did manage to light a fire though, and that's what you and Matt were sitting together, staring into as the stars came out.";! [224: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [225: ~Matt stands up with a yawn. 'I'm going to bed, honey,' he says. 'Don't know how long you wanna stay up.'~] ParaContent(); print "Matt stands up with a yawn. ~I'm going to bed, honey,~ he says. ~Don't know how long you wanna stay up.~";! [226: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [227: ~'I'll join you soon, baby,' you reply, giving his hand a kiss before he turns in.~] ParaContent(); print "~I'll join you soon, baby,~ you reply, giving his hand a kiss before he turns in.";! [228: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [229: ~You go back to staring at the fire, letting your mind unwind a little.~] ParaContent(); print "You go back to staring at the fire, letting your mind unwind a little.";! [230: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [231: ~>~] ParaContent(); print ">"; .L_Say25; .L_SayX25;! [232: wait for any key] KeyPause(); ! [233: say ~Enter tent[paragraph break]After a few minutes, you get up and join Matt in the tent. You're both pretty tired, so there's no fooling around. After another few minutes you're both asleep.[paragraph break](...)~] say__p=1;! [234: ~Enter tent~] ParaContent(); print "Enter tent";! [235: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [236: ~After a few minutes, you get up and join Matt in the tent. You're both pretty tired, so there's no fooling around. After another few minutes you're both asleep.~] ParaContent(); print "After a few minutes, you get up and join Matt in the tent. You're both pretty tired, so there's no fooling around. After another few minutes you're both asleep.";! [237: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [238: ~(...)~] ParaContent(); print "(...)"; new_line; .L_Say26; .L_SayX26;! [239: wait for any key] KeyPause(); ! [240: clear the screen] VM_ClearScreen(0); ! [241: say ~[line break][bold type]Campsite, Night[roman type][line break]You're jolted awake by a sudden roar, a roar that sounds like something out of a nightmare. But you're certain immediately that this nightmare is taking place in reality.[paragraph break]You hear something - whatever made that roar, probably - begin trashing Bryan and Selene's tent, and you hear both of them scream.[paragraph break]Matt is already getting up, and crawls out of the tent.[paragraph break]You hear another scream. It sounds like it was Selene.[paragraph break]>~] say__p=1;! [242: line break] ParaContent(); new_line;! [243: bold type] ParaContent(); style bold;! [244: ~Campsite, Night~] ParaContent(); print "Campsite, Night";! [245: roman type] ParaContent(); style roman;! [246: line break] ParaContent(); new_line;! [247: ~You're jolted awake by a sudden roar, a roar that sounds like something out of a nightmare. But you're certain immediately that this nightmare is taking place in reality.~] ParaContent(); print "You're jolted awake by a sudden roar, a roar that sounds like something out of a nightmare. But you're certain immediately that this nightmare is taking place in reality.";! [248: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [249: ~You hear something - whatever made that roar, probably - begin trashing Bryan and Selene's tent, and you hear both of them scream.~] ParaContent(); print "You hear something - whatever made that roar, probably - begin trashing Bryan and Selene's tent, and you hear both of them scream.";! [250: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [251: ~Matt is already getting up, and crawls out of the tent.~] ParaContent(); print "Matt is already getting up, and crawls out of the tent.";! [252: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [253: ~You hear another scream. It sounds like it was Selene.~] ParaContent(); print "You hear another scream. It sounds like it was Selene.";! [254: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [255: ~>~] ParaContent(); print ">"; .L_Say27; .L_SayX27;! [256: wait for any key] KeyPause(); ! [257: say ~Exit tent[paragraph break]With a feeling of dread weighing you down, you get up and leave the tent.[paragraph break]And you wish you hadn't.[paragraph break]You push the flap open just in time to see some kind of monster grab Selene from behind and smash her in the head several times. When it throws her to the ground, the shape of her head resembles a split watermelon.[paragraph break]Bryan screamed at the creature as it grabbed Selene, then ran into the forest as it killed her, sobbing the entire way.[paragraph break]Matt looks frozen in fear, an understandable reaction because it's the same one you're having right now.[paragraph break]>~] say__p=1;! [258: ~Exit tent~] ParaContent(); print "Exit tent";! [259: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [260: ~With a feeling of dread weighing you down, you get up and leave the tent.~] ParaContent(); print "With a feeling of dread weighing you down, you get up and leave the tent.";! [261: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [262: ~And you wish you hadn't.~] ParaContent(); print "And you wish you hadn't.";! [263: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [264: ~You push the flap open just in time to see some kind of monster grab Selene from behind and smash her in the head several times. When it throws her to the ground, the shape of her head resembles a split watermelon.~] ParaContent(); print "You push the flap open just in time to see some kind of monster grab Selene from behind and smash her in the head several times. When it throws her to the ground, the shape of her head resembles a split watermelon.";! [265: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [266: ~Bryan screamed at the creature as it grabbed Selene, then ran into the forest as it killed her, sobbing the entire way.~] ParaContent(); print "Bryan screamed at the creature as it grabbed Selene, then ran into the forest as it killed her, sobbing the entire way.";! [267: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [268: ~Matt looks frozen in fear, an understandable reaction because it's the same one you're having right now.~] ParaContent(); print "Matt looks frozen in fear, an understandable reaction because it's the same one you're having right now.";! [269: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [270: ~>~] ParaContent(); print ">"; .L_Say28; .L_SayX28;! [271: wait for any key] KeyPause(); ! [272: say ~Look at monster[paragraph break]You can't make its features out very well, but you can very clearly see that it's tall, taller than Matt, probably seven feet, and that it's big, with big muscles, and it's walking upright and it's got some VERY long and sharp-looking claws.[paragraph break]It turns to face you and Matt and roars again, a horrible metallic roar.[paragraph break]>~] say__p=1;! [273: ~Look at monster~] ParaContent(); print "Look at monster";! [274: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [275: ~You can't make its features out very well, but you can very clearly see that it's tall, taller than Matt, probably seven feet, and that it's big, with big muscles, and it's walking upright and it's got some VERY long and sharp-looking claws.~] ParaContent(); print "You can't make its features out very well, but you can very clearly see that it's tall, taller than Matt, probably seven feet, and that it's big, with big muscles, and it's walking upright and it's got some VERY long and sharp-looking claws.";! [276: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [277: ~It turns to face you and Matt and roars again, a horrible metallic roar.~] ParaContent(); print "It turns to face you and Matt and roars again, a horrible metallic roar.";! [278: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [279: ~>~] ParaContent(); print ">"; .L_Say29; .L_SayX29;! [280: wait for any key] KeyPause(); ! [281: say ~RUN[paragraph break]You feel sluggish, slow to react, slowed by fear.[paragraph break]The roar seems to snap Matt out of his fear, though. He reaches down and hauls you out of the tent to your feet as the monster runs toward you. He pushes you ahead of him into the woods as the two of you stumble to a start toward the cover of the forest but it's already far too late, the monster reaches Matt almost immediately. It knocks him down with one of its massive paws, then picks him back up, and slashes its giant claws across with throat. Blood sprays from the jugular like a fountain as the beast throws Matt back to the ground.[paragraph break]'NOOO!' you yell with a sob. Tears of sadness, of anger, come to your eyes. You look at Matt's dying form, then leap at the monster, putting your hands around its throat. The monster seems surprised at first, but easily wrestles you off of him and contemptuously casts you to the ground. You guess this is the end.[paragraph break]>~] say__p=1;! [282: ~RUN~] ParaContent(); print "RUN";! [283: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [284: ~You feel sluggish, slow to react, slowed by fear.~] ParaContent(); print "You feel sluggish, slow to react, slowed by fear.";! [285: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [286: ~The roar seems to snap Matt out of his fear, though. He reaches down and hauls you out of the tent to your feet as the monster runs toward you. He pushes you ahead of him into the woods as the two of you stumble to a start toward the cover of the forest but it's already far too late, the monster reaches Matt almost immediately. It knocks him down with one of its massive paws, then picks him back up, and slashes its giant claws across with throat. Blood sprays from the jugular like a fountain as the beast throws Matt back to the ground.~] ParaContent(); print "The roar seems to snap Matt out of his fear, though. He reaches down and hauls you out of the tent to your feet as the monster runs toward you. He pushes you ahead of him into the woods as the two of you stumble to a start toward the cover of the forest but it's already far too late, the monster reaches Matt almost immediately. It knocks him down with one of its massive paws, then picks him back up, and slashes its giant claws across with throat. Blood sprays from the jugular like a fountain as the beast throws Matt back to the ground.";! [287: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [288: ~'NOOO!' you yell with a sob. Tears of sadness, of anger, come to your eyes. You look at Matt's dying form, then leap at the monster, putting your hands around its throat. The monster seems surprised at first, but easily wrestles you off of him and contemptuously casts you to the ground. You guess this is the end.~] ParaContent(); print "~NOOO!~ you yell with a sob. Tears of sadness, of anger, come to your eyes. You look at Matt's dying form, then leap at the monster, putting your hands around its throat. The monster seems surprised at first, but easily wrestles you off of him and contemptuously casts you to the ground. You guess this is the end.";! [289: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [290: ~>~] ParaContent(); print ">"; .L_Say30; .L_SayX30;! [291: wait for any key] KeyPause(); ! [292: say ~Look at Matt[paragraph break]Oh god, Matt. Staring forever at the sky with glassy eyes. You should've had a life together[unicode 8230] snatched away by some monster that shouldn't even exist[unicode 8230][paragraph break]The monster glowers down at you, and you wait for the fatal blow.[paragraph break]Suddenly the monster seems to tear off one of its own paws, and in its place is a hand. Before you can even process this, that hand reaches down and you feel a sting, the sting of a needle sliding into your flesh. You try to stand, to flee, to something, but the strength ebbs from your body within seconds. But you don't go unconscious.[paragraph break]So you get to see the monster tear off its other paw, take off its head, and finally shed its hairy torso and legs. In its place is a human, but you're quite sure he's no less of a monster than the one portrayed by his suit.[paragraph break]He sticks the paws and head into a backpack that was under his suit, then rolls up the body and manages to stuff it in as well. He turns his attention to you, saying, 'The lieutenant colonel wanted one of you alive, and it looks like you get to be the lucky one.'[paragraph break]Some luck, you think as he hoists you over his shoulder and carries you away, handling you like one might a dead body[unicode 8230][paragraph break](...)~] say__p=1;! [293: ~Look at Matt~] ParaContent(); print "Look at Matt";! [294: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [295: ~Oh god, Matt. Staring forever at the sky with glassy eyes. You should've had a life together~] ParaContent(); print "Oh god, Matt. Staring forever at the sky with glassy eyes. You should've had a life together";! [296: unicode 8230] ParaContent(); unicode_temp = 8230; #ifdef TARGET_ZCODE; @print_unicode unicode_temp; #ifnot; @streamunichar unicode_temp; #endif;! [297: ~ snatched away by some monster that shouldn't even exist~] ParaContent(); print " snatched away by some monster that shouldn't even exist";! [298: unicode 8230] ParaContent(); unicode_temp = 8230; #ifdef TARGET_ZCODE; @print_unicode unicode_temp; #ifnot; @streamunichar unicode_temp; #endif;! [299: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [300: ~The monster glowers down at you, and you wait for the fatal blow.~] ParaContent(); print "The monster glowers down at you, and you wait for the fatal blow.";! [301: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [302: ~Suddenly the monster seems to tear off one of its own paws, and in its place is a hand. Before you can even process this, that hand reaches down and you feel a sting, the sting of a needle sliding into your flesh. You try to stand, to flee, to something, but the strength ebbs from your body within seconds. But you don't go unconscious.~] ParaContent(); print "Suddenly the monster seems to tear off one of its own paws, and in its place is a hand. Before you can even process this, that hand reaches down and you feel a sting, the sting of a needle sliding into your flesh. You try to stand, to flee, to something, but the strength ebbs from your body within seconds. But you don't go unconscious.";! [303: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [304: ~So you get to see the monster tear off its other paw, take off its head, and finally shed its hairy torso and legs. In its place is a human, but you're quite sure he's no less of a monster than the one portrayed by his suit.~] ParaContent(); print "So you get to see the monster tear off its other paw, take off its head, and finally shed its hairy torso and legs. In its place is a human, but you're quite sure he's no less of a monster than the one portrayed by his suit.";! [305: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [306: ~He sticks the paws and head into a backpack that was under his suit, then rolls up the body and manages to stuff it in as well. He turns his attention to you, saying, 'The lieutenant colonel wanted one of you alive, and it looks like you get to be the lucky one.'~] ParaContent(); print "He sticks the paws and head into a backpack that was under his suit, then rolls up the body and manages to stuff it in as well. He turns his attention to you, saying, ~The lieutenant colonel wanted one of you alive, and it looks like you get to be the lucky one.~";! [307: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [308: ~Some luck, you think as he hoists you over his shoulder and carries you away, handling you like one might a dead body~] ParaContent(); print "Some luck, you think as he hoists you over his shoulder and carries you away, handling you like one might a dead body";! [309: unicode 8230] ParaContent(); unicode_temp = 8230; #ifdef TARGET_ZCODE; @print_unicode unicode_temp; #ifnot; @streamunichar unicode_temp; #endif;! [310: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [311: ~(...)~] ParaContent(); print "(...)"; new_line; .L_Say31; .L_SayX31;! [312: wait for any key] KeyPause(); ! [313: clear the screen] VM_ClearScreen(0); ! [314: say ~[line break][bold type]Infirmary[roman type][line break]The monster dragged you to some kind of military base. The drug he gave you has worn off now, but you still can't really move, because you've been strapped into some kind of dentist's chair. The monster left as soon as you were strapped in, but that was somewhere between several minutes and several hours ago, and nobody else has come in here since.[paragraph break]You can see a pushcart with a scalpel that might cut through the bindings from here.[paragraph break]>~] say__p=1;! [315: line break] ParaContent(); new_line;! [316: bold type] ParaContent(); style bold;! [317: ~Infirmary~] ParaContent(); print "Infirmary";! [318: roman type] ParaContent(); style roman;! [319: line break] ParaContent(); new_line;! [320: ~The monster dragged you to some kind of military base. The drug he gave you has worn off now, but you still can't really move, because you've been strapped into some kind of dentist's chair. The monster left as soon as you were strapped in, but that was somewhere between several minutes and several hours ago, and nobody else has come in here since.~] ParaContent(); print "The monster dragged you to some kind of military base. The drug he gave you has worn off now, but you still can't really move, because you've been strapped into some kind of dentist's chair. The monster left as soon as you were strapped in, but that was somewhere between several minutes and several hours ago, and nobody else has come in here since.";! [321: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [322: ~You can see a pushcart with a scalpel that might cut through the bindings from here.~] ParaContent(); print "You can see a pushcart with a scalpel that might cut through the bindings from here.";! [323: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [324: ~>~] ParaContent(); print ">"; .L_Say32; .L_SayX32;! [325: wait for any key] KeyPause(); ! [326: say ~Get scalpel[paragraph break]Yeah, that's not going to be happening. You can't reach all the way over there.[paragraph break]Just looking at the scalpel, at its sharp edge, reminds you of what happened to Matt, reminds you of the blood, of it playing out over and over and over and over and[paragraph break]You open your eyes. You feel like focusing might be important.[paragraph break]>~] say__p=1;! [327: ~Get scalpel~] ParaContent(); print "Get scalpel";! [328: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [329: ~Yeah, that's not going to be happening. You can't reach all the way over there.~] ParaContent(); print "Yeah, that's not going to be happening. You can't reach all the way over there.";! [330: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [331: ~Just looking at the scalpel, at its sharp edge, reminds you of what happened to Matt, reminds you of the blood, of it playing out over and over and over and over and~] ParaContent(); print "Just looking at the scalpel, at its sharp edge, reminds you of what happened to Matt, reminds you of the blood, of it playing out over and over and over and over and";! [332: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [333: ~You open your eyes. You feel like focusing might be important.~] ParaContent(); print "You open your eyes. You feel like focusing might be important.";! [334: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [335: ~>~] ParaContent(); print ">"; .L_Say33; .L_SayX33;! [336: wait for any key] KeyPause(); ! [337: say ~Escape[paragraph break]Sadly, it's not quite as easy as that.[paragraph break]>~] say__p=1;! [338: ~Escape~] ParaContent(); print "Escape";! [339: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [340: ~Sadly, it's not quite as easy as that.~] ParaContent(); print "Sadly, it's not quite as easy as that.";! [341: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [342: ~>~] ParaContent(); print ">"; .L_Say34; .L_SayX34;! [343: wait for any key] KeyPause(); ! [344: say ~Wait[paragraph break]With nothing else to do, you wait.[paragraph break]Time passes.[paragraph break]At last you hear the door open. Two men come into view. The first is dressed like a doctor, replete with a surgical mask, although you wonder what kind of doctor would agree to be part of something like this.[paragraph break]The second is a man who looks like he's in his forties or fifties, already most of the way to bald with gray hair. He wears a gray shirt, black slacks, and a black vest, and has a United States Air Force patch sewn onto the latter.[paragraph break]He looks you over for a minute, then turns to the doctor and says, 'Do it.' The doctor reveals a needle, rolls up your sleeve, dabs your skin with an antiseptic cloth, and injects you. You slip into unconsciousness within thirty seconds, left only with the sting, the sting, the sting of the needle[unicode 8230][paragraph break](...)~] say__p=1;! [345: ~Wait~] ParaContent(); print "Wait";! [346: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [347: ~With nothing else to do, you wait.~] ParaContent(); print "With nothing else to do, you wait.";! [348: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [349: ~Time passes.~] ParaContent(); print "Time passes.";! [350: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [351: ~At last you hear the door open. Two men come into view. The first is dressed like a doctor, replete with a surgical mask, although you wonder what kind of doctor would agree to be part of something like this.~] ParaContent(); print "At last you hear the door open. Two men come into view. The first is dressed like a doctor, replete with a surgical mask, although you wonder what kind of doctor would agree to be part of something like this.";! [352: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [353: ~The second is a man who looks like he's in his forties or fifties, already most of the way to bald with gray hair. He wears a gray shirt, black slacks, and a black vest, and has a United States Air Force patch sewn onto the latter.~] ParaContent(); print "The second is a man who looks like he's in his forties or fifties, already most of the way to bald with gray hair. He wears a gray shirt, black slacks, and a black vest, and has a United States Air Force patch sewn onto the latter.";! [354: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [355: ~He looks you over for a minute, then turns to the doctor and says, 'Do it.' The doctor reveals a needle, rolls up your sleeve, dabs your skin with an antiseptic cloth, and injects you. You slip into unconsciousness within thirty seconds, left only with the sting, the sting, the sting of the needle~] ParaContent(); print "He looks you over for a minute, then turns to the doctor and says, ~Do it.~ The doctor reveals a needle, rolls up your sleeve, dabs your skin with an antiseptic cloth, and injects you. You slip into unconsciousness within thirty seconds, left only with the sting, the sting, the sting of the needle";! [356: unicode 8230] ParaContent(); unicode_temp = 8230; #ifdef TARGET_ZCODE; @print_unicode unicode_temp; #ifnot; @streamunichar unicode_temp; #endif;! [357: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [358: ~(...)~] ParaContent(); print "(...)"; new_line; .L_Say35; .L_SayX35;! [359: wait for any key] KeyPause(); ! [360: clear the screen] VM_ClearScreen(0); ! [361: say ~The soldiers haul you deeper into the facility, into some kind of cell block, dumping you into the cot of an empty cell with no more ceremony than a group of mobsters dumping a snitch into a shallow grave. You can't move yet, of course, having been injected with the same drug the monster gave you.[paragraph break][bold type]Cell[roman type][line break]The room is practically barren, with a dim yellow bulb in the ceiling and four utterly undecorated walls. Apart from your bunk, it's empty.[paragraph break]But now, you remember everything.~] say__p=1;! [362: ~The soldiers haul you deeper into the facility, into some kind of cell block, dumping you into the cot of an empty cell with no more ceremony than a group of mobsters dumping a snitch into a shallow grave. You can't move yet, of course, having been injected with the same drug the monster gave you.~] ParaContent(); print "The soldiers haul you deeper into the facility, into some kind of cell block, dumping you into the cot of an empty cell with no more ceremony than a group of mobsters dumping a snitch into a shallow grave. You can't move yet, of course, having been injected with the same drug the monster gave you.";! [363: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [364: bold type] ParaContent(); style bold;! [365: ~Cell~] ParaContent(); print "Cell";! [366: roman type] ParaContent(); style roman;! [367: line break] ParaContent(); new_line;! [368: ~The room is practically barren, with a dim yellow bulb in the ceiling and four utterly undecorated walls. Apart from your bunk, it's empty.~] ParaContent(); print "The room is practically barren, with a dim yellow bulb in the ceiling and four utterly undecorated walls. Apart from your bunk, it's empty.";! [369: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [370: ~But now, you remember everything.~] ParaContent(); print "But now, you remember everything."; new_line; .L_Say36; .L_SayX36;! [371: end the story finally] deadflag=3; story_complete=true; } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Action-processing (B9_action_processing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/11 ! This is the announce items from multiple object lists rule: ! === equally specific with === ! Rule 2/11 ! This is the set pronouns from items from multiple object lists rule: ! === equally specific with === ! Rule 3/11 ! This is the before stage rule: ! --- now the mid-placed rules --- ! Rule 4/11: BASIC_VISIBILITY_R ! === equally specific with === ! Rule 5/11: BASIC_ACCESSIBILITY_R ! <<< IV - Action requirement <<< ! Rule 6/11 ! This is the keychain-aware carrying requirements rule: ! --- now the last-placed rules --- ! Rule 7/11 ! This is the instead stage rule: ! === equally specific with === ! Rule 8/11: REQUESTED_ACTIONS_REQUIRE_R ! === equally specific with === ! Rule 9/11: CARRY_OUT_REQUESTED_ACTIONS_R ! === equally specific with === ! Rule 10/11: DESCEND_TO_SPECIFIC_ACTION_R ! === equally specific with === ! Rule 11/11 ! This is the end action-processing in success rule: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! This is the announce items from multiple object lists rule: [ R_22 ; if (debug_rules) DB_Rule(R_22, 22); ! [2: if the current item from the multiple object list is not nothing] if (((~~((multiple_object_item == nothing))))) {! [3: say ~[current item from the multiple object list]: [run paragraph on]~ ( a )] say__p=1;! [4: ~[current item from the multiple object list]: [run paragraph on]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_134); .L_Say37; .L_SayX37;} rfalse; ]; ! From the Standard Rules ! No specific request ! This is the set pronouns from items from multiple object lists rule: [ R_21 ; if (debug_rules) DB_Rule(R_21, 21); ! [2: if the current item from the multiple object list is not nothing] if (((~~((multiple_object_item == nothing))))) {! [3: set pronouns from the current item from the multiple object list] PronounNotice(multiple_object_item); } rfalse; ]; ! From the Standard Rules ! No specific request ! This is the before stage rule: [ R_23 ; if (debug_rules) DB_Rule(R_23, 23); ! [2: abide by the before rules] if (FollowRulebook(RULEBOOK_TY_to_RULE_TY(19))) rtrue; rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the keychain-aware carrying requirements rule: [ R_844 ; if (debug_rules) DB_Rule(R_844, 844); ! [2: if locking or unlocking something with something which is on a keychain which is carried by the actor] if (((((action ==##Lock) && (actor==player)))) || ((((action ==##Unlock) && (actor==player) && ((noun ofclass K2_thing)) && ((second ofclass K2_thing) && (SupporterOf(second) ofclass K17_keychain) && (actor == CarrierOf(SupporterOf(second)))))))) {! [3: continue the action] rfalse; } ! [4: abide by the carrying requirements rule] if (FollowRulebook(CARRYING_REQUIREMENTS_R)) rtrue; rfalse; ]; ! From the Standard Rules ! No specific request ! This is the instead stage rule: [ R_24 ; if (debug_rules) DB_Rule(R_24, 24); ! [2: abide by the instead rules] if (FollowRulebook(RULEBOOK_TY_to_RULE_TY(20))) rtrue; rfalse; ]; ! From the Standard Rules ! No specific request ! This is the end action-processing in success rule: [ R_25 ; if (debug_rules) DB_Rule(R_25, 25); ! [2: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Setting action variables (B10_setting_action_variables) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Rule for setting action variables for going ( this is the standard set going variables rule ): ! === equally specific with === ! Rule 2/3 ! Setting action variables for exiting: ! === equally specific with === ! Rule 3/3 ! Setting action variables for looking ( this is the determine visibility ceiling rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Rule for setting action variables for going ( this is the standard set going variables rule ): [ R_151 I7RBLK; @push I7SFRAME; StackFrameCreate(0); @push formal_par0; @push formal_par1; I7RBLK = KERNEL_2(); @pull formal_par1; @pull formal_par0; @pull I7SFRAME; return I7RBLK; ! nothing ]; [ KERNEL_2 tmp_0 ! Let/loop value, e.g., 'carriage': vehicle tmp_1 ! Let/loop value, e.g., 'target': object tmp_2 ! Let/loop value (deallocated by end of phrase) ; if ((((action ==##Go)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_151, 151); ! [2: now the thing gone with is the item-pushed-between-rooms] (MStack-->MstVO(20007,4)) = move_pushing; ! [3: now the room gone from is the location of the actor] (MStack-->MstVO(20007,0)) = LocationOf(actor); ! [4: if the actor is in an enterable vehicle ( called the carriage )] if (((ContainerOf(actor) ofclass K14_vehicle) && ((Adj_71_t1_v10(ContainerOf(actor)))) && (tmp_0=(ContainerOf(actor)), true))) {! [5: now the vehicle gone by is the carriage] (MStack-->MstVO(20007,3)) = tmp_0; } ! [6: let the target be nothing] tmp_1 = nothing; ! [7: if the noun is a direction] if (((noun ofclass K3_direction))) {! [8: let direction d be the noun] tmp_2 = noun; ! [9: let the target be the room-or-door direction d from the room gone from] tmp_1 = ! Resolution of run-time phrase ambiguity (deciding a value): ( ! This value evaluates third (i.e., last) formal_rv + 0*( ! The following condition evaluates second (( ((((((formal_par0 ofclass K3_direction) && (formal_par0 ofclass K3_direction))))) && (( formal_rv = RoomOrDoorFrom(formal_par1,formal_par0)) | 1) )|| (ArgumentTypeFailed(2287, 1)) )) + ! The following assignments evaluate first ((formal_par1 = (MStack-->MstVO(20007,0))) + (formal_par0 = tmp_2) )) ) ! Resolution complete ; } else { ! [10: if the noun is a door] if (((noun ofclass K4_door))) {! [11: let the target be the noun] tmp_1 = noun; } } ! [12: if the target is a door] if (((tmp_1 ofclass K4_door))) {! [13: now the door gone through is the target] (MStack-->MstVO(20007,2)) = tmp_1; ! [14: now the target is the other side of the target from the room gone from] tmp_1 = ! Resolution of run-time phrase ambiguity (deciding a value): ( ! This value evaluates third (i.e., last) formal_rv + 0*( ! The following condition evaluates second (( ((((((formal_par0 ofclass K4_door) && (formal_par0 ofclass K4_door))))) && (( formal_rv = OtherSideOfDoor(formal_par0,formal_par1)) | 1) )|| (ArgumentTypeFailed(2292, 1)) )) + ! The following assignments evaluate first ((formal_par1 = (MStack-->MstVO(20007,0))) + (formal_par0 = tmp_1) )) ) ! Resolution complete ; } ! [15: now the room gone to is the target] (MStack-->MstVO(20007,1)) = tmp_1; } else if (debug_rules > 1) DB_Rule(R_151, 151, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Setting action variables for exiting: [ R_174 ; if ((((action ==##Exit)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_174, 174); ! [2: now the container exited from is the holder of the actor] (MStack-->MstVO(20009,0)) = (HolderOf(actor)); } else if (debug_rules > 1) DB_Rule(R_174, 174, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Setting action variables for looking ( this is the determine visibility ceiling rule ): [ R_186 ; if ((((action ==##Look)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_186, 186); ! [2: if the actor is the player] if (((actor == player))) {! [3: calculate visibility ceiling at low level] FindVisibilityLevels(); } ! [4: now the visibility level count is the visibility ceiling count calculated] (MStack-->MstVO(20011,2)) = visibility_levels; ! [5: now the visibility ceiling is the visibility ceiling calculated] (MStack-->MstVO(20011,3)) = visibility_ceiling; ! [6: now the room-describing action is the looking action] (MStack-->MstVO(20011,0)) = ##Look; } else if (debug_rules > 1) DB_Rule(R_186, 186, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: specific action-processing (B11_specific_action_processi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/8: WORK_OUT_DETAILS_OF_SPECIFIC_R ! --- now the mid-placed rules --- ! Rule 2/8 ! A specific action-processing rule ( this is the investigate player's awareness before action rule ): ! === equally specific with === ! Rule 3/8 ! A specific action-processing rule ( this is the check stage rule ): ! === equally specific with === ! Rule 4/8 ! A specific action-processing rule ( this is the carry out stage rule ): ! === equally specific with === ! Rule 5/8 ! A specific action-processing rule ( this is the after stage rule ): ! === equally specific with === ! Rule 6/8 ! A specific action-processing rule ( this is the investigate player's awareness after action rule ): ! === equally specific with === ! Rule 7/8 ! A specific action-processing rule ( this is the report stage rule ): ! --- now the last-placed rules --- ! Rule 8/8 ! The last specific action-processing rule: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! A specific action-processing rule ( this is the investigate player's awareness before action rule ): [ R_26 ; if (debug_rules) DB_Rule(R_26, 26); ! [2: follow the player's action awareness rules] FollowRulebook(RULEBOOK_TY_to_RULE_TY(12)); ! [3: if rule succeeded] if (((RulebookSucceeded()))) {! [4: now within the player's sight is true] (MStack-->MstVO(11,5)) = 1; } else { ! [5: now within the player's sight is false] (MStack-->MstVO(11,5)) = 0; } rfalse; ]; ! From the Standard Rules ! No specific request ! A specific action-processing rule ( this is the check stage rule ): [ R_27 ; if (debug_rules) DB_Rule(R_27, 27); ! [2: anonymously abide by the specific check rulebook] if (temporary_value = FollowRulebook(RULEBOOK_TY_to_RULE_TY((MStack-->MstVO(11,2))))) { if (RulebookSucceeded()) ActRulebookSucceeds(temporary_value); else ActRulebookFails(temporary_value); return 2; } rfalse; ]; ! From the Standard Rules ! No specific request ! A specific action-processing rule ( this is the carry out stage rule ): [ R_28 ; if (debug_rules) DB_Rule(R_28, 28); ! [2: follow the specific carry out rulebook] FollowRulebook(RULEBOOK_TY_to_RULE_TY((MStack-->MstVO(11,3)))); rfalse; ]; ! From the Standard Rules ! No specific request ! A specific action-processing rule ( this is the after stage rule ): [ R_29 ; if (debug_rules) DB_Rule(R_29, 29); ! [2: if action in world is true] if (((((MStack-->MstVO(11,0)) && true) == (1 && true)))) {! [3: abide by the after rules] if (FollowRulebook(RULEBOOK_TY_to_RULE_TY(23))) rtrue; } rfalse; ]; ! From the Standard Rules ! No specific request ! A specific action-processing rule ( this is the investigate player's awareness after action rule ): [ R_30 ; if (debug_rules) DB_Rule(R_30, 30); ! [2: if within the player's sight is false] if (((((MStack-->MstVO(11,5)) && true) == (0 && true)))) {! [3: follow the player's action awareness rules] FollowRulebook(RULEBOOK_TY_to_RULE_TY(12)); ! [4: if rule succeeded] if (((RulebookSucceeded()))) {! [5: now within the player's sight is true] (MStack-->MstVO(11,5)) = 1; } } rfalse; ]; ! From the Standard Rules ! No specific request ! A specific action-processing rule ( this is the report stage rule ): [ R_31 ; if (debug_rules) DB_Rule(R_31, 31); ! [2: if within the player's sight is true and action keeping silent is false] if ((((((MStack-->MstVO(11,5)) && true) == (1 && true)))) && (((((MStack-->MstVO(11,1)) && true) == (0 && true))))) {! [3: follow the specific report rulebook] FollowRulebook(RULEBOOK_TY_to_RULE_TY((MStack-->MstVO(11,4)))); } rfalse; ]; ! From the Standard Rules ! No specific request ! The last specific action-processing rule: [ R_32 ; if (debug_rules) DB_Rule(R_32, 32); ! [2: rule succeeds] RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: player's action awareness (B12_player_s_action_awarenes) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! A player's action awareness rule ( this is the player aware of his own actions rule ): ! === equally specific with === ! Rule 2/4 ! A player's action awareness rule ( this is the player aware of actions by visible actors rule ): ! === equally specific with === ! Rule 3/4 ! A player's action awareness rule ( this is the player aware of actions on visible nouns rule ): ! === equally specific with === ! Rule 4/4 ! A player's action awareness rule ( this is the player aware of actions on visible second nouns rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! A player's action awareness rule ( this is the player aware of his own actions rule ): [ R_33 ; if (debug_rules) DB_Rule(R_33, 33); ! [2: if the player is the actor] if (((player == actor))) {! [3: rule succeeds] RulebookSucceeds(); rtrue; } rfalse; ]; ! From the Standard Rules ! No specific request ! A player's action awareness rule ( this is the player aware of actions by visible actors rule ): [ R_34 ; if (debug_rules) DB_Rule(R_34, 34); ! [2: if the player is not the actor and the player can see the actor] if ((((~~((player == actor))))) && (((TestVisibility(player,actor))))) {! [3: rule succeeds] RulebookSucceeds(); rtrue; } rfalse; ]; ! From the Standard Rules ! No specific request ! A player's action awareness rule ( this is the player aware of actions on visible nouns rule ): [ R_35 ; if (debug_rules) DB_Rule(R_35, 35); ! [2: if the noun is a thing and the player can see the noun] if ((((noun ofclass K2_thing))) && (((TestVisibility(player,noun))))) {! [3: rule succeeds] RulebookSucceeds(); rtrue; } rfalse; ]; ! From the Standard Rules ! No specific request ! A player's action awareness rule ( this is the player aware of actions on visible second nouns rule ): [ R_36 ; if (debug_rules) DB_Rule(R_36, 36); ! [2: if the second noun is a thing and the player can see the second noun] if ((((second ofclass K2_thing))) && (((TestVisibility(player,second))))) {! [3: rule succeeds] RulebookSucceeds(); rtrue; } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Visibility (B16_visibility) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! The last visibility rule ( this is the can't act in the dark rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! The last visibility rule ( this is the can't act in the dark rule ): [ R_37 ; if (debug_rules) DB_Rule(R_37, 37); ! [2: if in darkness] if (((location==thedark))) {! [3: rule succeeds] RulebookSucceeds(); rtrue; } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Before (B19_before) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/8 ! Before someone trying going through a closed door ( called the blocking door ) ( this is the intelligently opening doors rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/8 ! Before going through a closed door ( called the blocking door ) ( this is the opening doors before entering rule ): ! >>> III.2.1 - Action/Where/Going In Exotic Ways >>> ! Rule 3/8 ! Before someone trying locking an open thing ( called the door ajar ) with something ( this is the intelligently closing doors rule ): ! >>> III.3.3 - Action/What/Actor Performing Action >>> ! Rule 4/8 ! Before locking an open thing ( called the door ajar ) with something ( this is the closing doors before locking rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 5/8 ! Before someone trying locking keylessly an open thing ( called the door ajar ) ( this is the intelligently closing keyless doors rule ): ! === equally specific with === ! Rule 6/8 ! Before someone trying opening a locked thing ( called the sealed chest ) ( this is the intelligently opening containers rule ): ! >>> III.3.3 - Action/What/Actor Performing Action >>> ! Rule 7/8 ! Before locking keylessly an open thing ( called the door ajar ) ( this is the closing doors before locking keylessly rule ): ! === equally specific with === ! Rule 8/8 ! Before opening a locked thing ( called the sealed chest ) ( this is the unlocking before opening rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Before someone trying going through a closed door ( called the blocking door ) ( this is the intelligently opening doors rule ): [ R_821 tmp_0 ! Let/loop value, e.g., 'blocking door': door ; if ((((action ==##Go) && (actor~=player) && (act_requester==nothing) && ((actor ofclass K8_person)) && (tmp_0 = (MStack-->MstVON(20007,2)), ((((MStack-->MstVON(20007,2)) ofclass K4_door) && ((Adj_75_t1_v10((MStack-->MstVON(20007,2))))) && (tmp_0=((MStack-->MstVON(20007,2))), true)))) && ((MStack-->MstVON(20007,1)) ~= nothing)) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_821, 821); ! [2: try the person asked trying opening the blocking door] TryAction(0, actor, ##Open, tmp_0, 0); ! [3: if the blocking door is closed] if ((((Adj_75_t1_v10(tmp_0))))) {! [4: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_821, 821, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Before going through a closed door ( called the blocking door ) ( this is the opening doors before entering rule ): [ R_817 tmp_0 ! Let/loop value, e.g., 'blocking door': door ; if ((((action ==##Go) && (actor==player) && (tmp_0 = (MStack-->MstVON(20007,2)), ((((MStack-->MstVON(20007,2)) ofclass K4_door) && ((Adj_75_t1_v10((MStack-->MstVON(20007,2))))) && (tmp_0=((MStack-->MstVON(20007,2))), true)))) && ((MStack-->MstVON(20007,1)) ~= nothing)) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_817, 817); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: try opening the blocking door] TryAction(0, player, ##Open, tmp_0, 0); } else { ! [4: say ~(first opening [the blocking door])[command clarification break]~ ( a )] say__p=1;! [5: ~(first opening [the blocking door])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_135); .L_Say38; .L_SayX38;! [6: silently try opening the blocking door] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, player, ##Open, tmp_0, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; } ! [7: if the blocking door is closed] if ((((Adj_75_t1_v10(tmp_0))))) {! [8: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_817, 817, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Before someone trying locking an open thing ( called the door ajar ) with something ( this is the intelligently closing doors rule ): [ R_822 tmp_0 ! Let/loop value, e.g., 'door ajar': thing ; if ((((action ==##Lock) && (actor~=player) && (act_requester==nothing) && ((actor ofclass K8_person)) && (tmp_0 = noun, (((noun ofclass K2_thing) && ((Adj_74_t1_v10(noun))) && (tmp_0=(noun), true)))) && ((second ofclass K2_thing))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_822, 822); ! [2: try the person asked trying closing the door ajar] TryAction(0, actor, ##Close, tmp_0, 0); ! [3: if the door ajar is open] if ((((Adj_74_t1_v10(tmp_0))))) {! [4: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_822, 822, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Before locking an open thing ( called the door ajar ) with something ( this is the closing doors before locking rule ): [ R_818 tmp_0 ! Let/loop value, e.g., 'door ajar': thing ; if ((((action ==##Lock) && (actor==player) && (tmp_0 = noun, (((noun ofclass K2_thing) && ((Adj_74_t1_v10(noun))) && (tmp_0=(noun), true)))) && ((second ofclass K2_thing))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_818, 818); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: try closing the door ajar] TryAction(0, player, ##Close, tmp_0, 0); } else { ! [4: say ~(first closing [the door ajar])[command clarification break]~ ( a )] say__p=1;! [5: ~(first closing [the door ajar])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_136); .L_Say39; .L_SayX39;! [6: silently try closing the door ajar] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, player, ##Close, tmp_0, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; } ! [7: if the door ajar is open] if ((((Adj_74_t1_v10(tmp_0))))) {! [8: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_818, 818, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Before someone trying locking keylessly an open thing ( called the door ajar ) ( this is the intelligently closing keyless doors rule ): [ R_823 tmp_0 ! Let/loop value, e.g., 'door ajar': thing ; if ((((action ==##A78_locking_keylessly) && (actor~=player) && (act_requester==nothing) && ((actor ofclass K8_person)) && (tmp_0 = noun, (((noun ofclass K2_thing) && ((Adj_74_t1_v10(noun))) && (tmp_0=(noun), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_823, 823); ! [2: try the person asked trying closing the door ajar] TryAction(0, actor, ##Close, tmp_0, 0); ! [3: if the door ajar is open] if ((((Adj_74_t1_v10(tmp_0))))) {! [4: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_823, 823, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Before someone trying opening a locked thing ( called the sealed chest ) ( this is the intelligently opening containers rule ): [ R_824 tmp_0 ! Let/loop value, e.g., 'sealed chest': thing ; if ((((action ==##Open) && (actor~=player) && (act_requester==nothing) && ((actor ofclass K8_person)) && (tmp_0 = noun, (((noun ofclass K2_thing) && ((Adj_79_t1_v10(noun))) && (tmp_0=(noun), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_824, 824); ! [2: try the person asked trying unlocking keylessly the sealed chest] TryAction(0, actor, ##A77_unlocking_keylessly, tmp_0, 0); ! [3: if the sealed chest is locked] if ((((Adj_79_t1_v10(tmp_0))))) {! [4: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_824, 824, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Before locking keylessly an open thing ( called the door ajar ) ( this is the closing doors before locking keylessly rule ): [ R_819 tmp_0 ! Let/loop value, e.g., 'door ajar': thing ; if ((((action ==##A78_locking_keylessly) && (actor==player) && (tmp_0 = noun, (((noun ofclass K2_thing) && ((Adj_74_t1_v10(noun))) && (tmp_0=(noun), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_819, 819); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: try closing the door ajar] TryAction(0, player, ##Close, tmp_0, 0); } else { ! [4: say ~(first closing [the door ajar])[command clarification break]~ ( a )] say__p=1;! [5: ~(first closing [the door ajar])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_137); .L_Say40; .L_SayX40;! [6: silently try closing the door ajar] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, player, ##Close, tmp_0, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; } ! [7: if the door ajar is open] if ((((Adj_74_t1_v10(tmp_0))))) {! [8: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_819, 819, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Before opening a locked thing ( called the sealed chest ) ( this is the unlocking before opening rule ): [ R_820 tmp_0 ! Let/loop value, e.g., 'sealed chest': thing ; if ((((action ==##Open) && (actor==player) && (tmp_0 = noun, (((noun ofclass K2_thing) && ((Adj_79_t1_v10(noun))) && (tmp_0=(noun), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_820, 820); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: try unlocking keylessly the sealed chest] TryAction(0, player, ##A77_unlocking_keylessly, tmp_0, 0); } else { ! [4: say ~(first unlocking [the sealed chest])[command clarification break]~ ( a )] say__p=1;! [5: ~(first unlocking [the sealed chest])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_138); .L_Say41; .L_SayX41;! [6: silently try unlocking keylessly the sealed chest] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, player, ##A77_unlocking_keylessly, tmp_0, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; } ! [7: if the sealed chest is locked] if ((((Adj_79_t1_v10(tmp_0))))) {! [8: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_820, 820, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: Instead (B20_instead) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/41 ! Instead of going east in the Mysterious Room: ! === equally specific with === ! Rule 2/41 ! Instead of going west in the Mysterious Room: ! === equally specific with === ! Rule 3/41 ! Instead of going up in the Mysterious Room: ! === equally specific with === ! Rule 4/41 ! Instead of going down in the Mysterious Room: ! === equally specific with === ! Rule 5/41 ! Instead of going north in the Testing Area: ! === equally specific with === ! Rule 6/41 ! Instead of going east in the Testing Area: ! === equally specific with === ! Rule 7/41 ! Instead of going south in the Testing Area: ! === equally specific with === ! Rule 8/41 ! Instead of going west in the Testing Area: ! === equally specific with === ! Rule 9/41 ! Instead of going up in the Testing Area: ! === equally specific with === ! Rule 10/41 ! Instead of going down in the Testing Area: ! === equally specific with === ! Rule 11/41 ! Instead of going down in the Lower Landing: ! === equally specific with === ! Rule 12/41 ! Instead of going up in the Lower Landing: ! === equally specific with === ! Rule 13/41 ! Instead of going down in the Upper Landing: ! === equally specific with === ! Rule 14/41 ! Instead of going south in the Observation Room: ! >>> I - Number of aspects constrained >>> ! Rule 15/41 ! Instead of exiting in the Mysterious Room: ! === equally specific with === ! Rule 16/41 ! Instead of going in the Testing Area: ! >>> III.2.2 - Action/Where/Room Where Action Takes Place >>> ! Rule 17/41 ! Instead of putting something which is not a passkey on a keychain ( this is the limiting keychains rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 18/41 ! Instead of listening to the Mysterious Room: ! === equally specific with === ! Rule 19/41 ! Instead of smelling the Mysterious Room: ! === equally specific with === ! Rule 20/41 ! Instead of going south: ! === equally specific with === ! Rule 21/41 ! Instead of taking the lamp: ! === equally specific with === ! Rule 22/41 ! Instead of opening the journal: ! === equally specific with === ! Rule 23/41 ! Instead of opening the compartment: ! === equally specific with === ! Rule 24/41 ! Instead of pushing the left switch: ! === equally specific with === ! Rule 25/41 ! Instead of pushing the right switch: ! === equally specific with === ! Rule 26/41 ! Instead of attacking the slide puzzle box: ! === equally specific with === ! Rule 27/41 ! Instead of attacking the block of ice: ! === equally specific with === ! Rule 28/41 ! Instead of taking the wooden box: ! === equally specific with === ! Rule 29/41 ! Instead of attacking the wall: ! === equally specific with === ! Rule 30/41 ! Instead of touching the wall: ! === equally specific with === ! Rule 31/41 ! Instead of taking the equipment: ! === equally specific with === ! Rule 32/41 ! Instead of taking the fake room: ! === equally specific with === ! Rule 33/41 ! Instead of entering the first staircase: ! === equally specific with === ! Rule 34/41 ! Instead of climbing the first staircase: ! === equally specific with === ! Rule 35/41 ! Instead of entering the second staircase: ! === equally specific with === ! Rule 36/41 ! Instead of climbing the second staircase: ! === equally specific with === ! Rule 37/41 ! Instead of attacking the window: ! === equally specific with === ! Rule 38/41 ! Instead of taking the table: ! === equally specific with === ! Rule 39/41 ! Instead of opening the wooden door: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 40/41 ! Instead of entering the door: ! >>> I - Number of aspects constrained >>> ! Rule 41/41 ! Instead of escaping: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Instead of going east in the Mysterious Room: [ R_857 ; if ((((action ==##Go) && (actor==player) && ((noun == I57_east) && (true)) && ((real_location == I128_mysterious_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_857, 857); ! [2: say ~Just a blank wall in that direction.~] say__p=1;! [3: ~Just a blank wall in that direction.~] ParaContent(); print "Just a blank wall in that direction."; new_line; .L_Say42; .L_SayX42;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_857, 857, 'action'); rfalse; ]; ! No specific request ! Instead of going west in the Mysterious Room: [ R_858 ; if ((((action ==##Go) && (actor==player) && ((noun == I58_west) && (true)) && ((real_location == I128_mysterious_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_858, 858); ! [2: say ~Just a blank wall in that direction.~] say__p=1;! [3: ~Just a blank wall in that direction.~] ParaContent(); print "Just a blank wall in that direction."; new_line; .L_Say43; .L_SayX43;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_858, 858, 'action'); rfalse; ]; ! No specific request ! Instead of going up in the Mysterious Room: [ R_860 ; if ((((action ==##Go) && (actor==player) && ((noun == I59_up) && (true)) && ((real_location == I128_mysterious_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_860, 860); ! [2: say ~The ceiling would probably block you.~] say__p=1;! [3: ~The ceiling would probably block you.~] ParaContent(); print "The ceiling would probably block you."; new_line; .L_Say44; .L_SayX44;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_860, 860, 'action'); rfalse; ]; ! No specific request ! Instead of going down in the Mysterious Room: [ R_861 ; if ((((action ==##Go) && (actor==player) && ((noun == I60_down) && (true)) && ((real_location == I128_mysterious_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_861, 861); ! [2: say ~The floor feels pretty solid.~] say__p=1;! [3: ~The floor feels pretty solid.~] ParaContent(); print "The floor feels pretty solid."; new_line; .L_Say45; .L_SayX45;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_861, 861, 'action'); rfalse; ]; ! No specific request ! Instead of going north in the Testing Area: [ R_891 ; if ((((action ==##Go) && (actor==player) && ((noun == I51_north) && (true)) && ((real_location == I168_testing_area) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_891, 891); ! [2: say ~You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think.~] say__p=1;! [3: ~You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think.~] ParaContent(); print "You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think."; new_line; .L_Say46; .L_SayX46;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_891, 891, 'action'); rfalse; ]; ! No specific request ! Instead of going east in the Testing Area: [ R_892 ; if ((((action ==##Go) && (actor==player) && ((noun == I57_east) && (true)) && ((real_location == I168_testing_area) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_892, 892); ! [2: say ~You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think.~] say__p=1;! [3: ~You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think.~] ParaContent(); print "You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think."; new_line; .L_Say47; .L_SayX47;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_892, 892, 'action'); rfalse; ]; ! No specific request ! Instead of going south in the Testing Area: [ R_893 ; if ((((action ==##Go) && (actor==player) && ((noun == I54_south) && (true)) && ((real_location == I168_testing_area) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_893, 893); ! [2: say ~You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think.~] say__p=1;! [3: ~You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think.~] ParaContent(); print "You would be walking into a wall of inky blackness if you went that way. Better to stay in the light, you think."; new_line; .L_Say48; .L_SayX48;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_893, 893, 'action'); rfalse; ]; ! No specific request ! Instead of going west in the Testing Area: [ R_894 ; if ((((action ==##Go) && (actor==player) && ((noun == I58_west) && (true)) && ((real_location == I168_testing_area) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_894, 894); ! [2: say ~The only visible thing at floor level in that direction is the staircase, leading up.~] say__p=1;! [3: ~The only visible thing at floor level in that direction is the staircase, leading up.~] ParaContent(); print "The only visible thing at floor level in that direction is the staircase, leading up."; new_line; .L_Say49; .L_SayX49;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_894, 894, 'action'); rfalse; ]; ! No specific request ! Instead of going up in the Testing Area: [ R_895 ; if ((((action ==##Go) && (actor==player) && ((noun == I59_up) && (true)) && ((real_location == I168_testing_area) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_895, 895); ! [2: say ~You trudge up the stairs, towards the windowed room...~] say__p=1;! [3: ~You trudge up the stairs, towards the windowed room...~] ParaContent(); print "You trudge up the stairs, towards the windowed room..."; new_line; .L_Say50; .L_SayX50;! [4: now the player is in the lower landing] MoveObject(player,I176_lower_landing); ! [5: stop the action] rtrue; RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_895, 895, 'action'); rfalse; ]; ! No specific request ! Instead of going down in the Testing Area: [ R_898 ; if ((((action ==##Go) && (actor==player) && ((noun == I60_down) && (true)) && ((real_location == I168_testing_area) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_898, 898); ! [2: say ~You don't think you're getting through the floor.~] say__p=1;! [3: ~You don't think you're getting through the floor.~] ParaContent(); print "You don't think you're getting through the floor."; new_line; .L_Say51; .L_SayX51;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_898, 898, 'action'); rfalse; ]; ! No specific request ! Instead of going down in the Lower Landing: [ R_899 ; if ((((action ==##Go) && (actor==player) && ((noun == I60_down) && (true)) && ((real_location == I176_lower_landing) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_899, 899); ! [2: say ~There's nowhere to go but up.~] say__p=1;! [3: ~There's nowhere to go but up.~] ParaContent(); print "There's nowhere to go but up."; new_line; .L_Say52; .L_SayX52;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_899, 899, 'action'); rfalse; ]; ! No specific request ! Instead of going up in the Lower Landing: [ R_902 ; if ((((action ==##Go) && (actor==player) && ((noun == I59_up) && (true)) && ((real_location == I176_lower_landing) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_902, 902); ! [2: say ~You trudge up the stairs, a creeping sense of dread weighing you down...~] say__p=1;! [3: ~You trudge up the stairs, a creeping sense of dread weighing you down...~] ParaContent(); print "You trudge up the stairs, a creeping sense of dread weighing you down..."; new_line; .L_Say53; .L_SayX53;! [4: now the player is in the upper landing] MoveObject(player,I179_upper_landing); ! [5: stop the action] rtrue; RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_902, 902, 'action'); rfalse; ]; ! No specific request ! Instead of going down in the Upper Landing: [ R_903 ; if ((((action ==##Go) && (actor==player) && ((noun == I60_down) && (true)) && ((real_location == I179_upper_landing) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_903, 903); ! [2: say ~Nowhere to go but through the door.~] say__p=1;! [3: ~Nowhere to go but through the door.~] ParaContent(); print "Nowhere to go but through the door."; new_line; .L_Say54; .L_SayX54;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_903, 903, 'action'); rfalse; ]; ! No specific request ! Instead of going south in the Observation Room: [ R_908 ; if ((((action ==##Go) && (actor==player) && ((noun == I54_south) && (true)) && ((real_location == I181_observation_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_908, 908); ! [2: say ~Useless. It'll just put you back where you started.~] say__p=1;! [3: ~Useless. It'll just put you back where you started.~] ParaContent(); print "Useless. It'll just put you back where you started."; new_line; .L_Say55; .L_SayX55;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_908, 908, 'action'); rfalse; ]; ! No specific request ! Instead of exiting in the Mysterious Room: [ R_859 ; if ((((action ==##Exit) && (actor==player) && ((real_location == I128_mysterious_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_859, 859); ! [2: say ~There's only blank walls in every direction.~] say__p=1;! [3: ~There's only blank walls in every direction.~] ParaContent(); print "There's only blank walls in every direction."; new_line; .L_Say56; .L_SayX56;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_859, 859, 'action'); rfalse; ]; ! No specific request ! Instead of going in the Testing Area: [ R_888 ; if ((((action ==##Go) && (actor==player) && ((real_location == I168_testing_area) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_888, 888); ! [2: say ~No way you're going back in that fake room. You're getting to the bottom of what's going on here.~] say__p=1;! [3: ~No way you're going back in that fake room. You're getting to the bottom of what's going on here.~] ParaContent(); print "No way you're going back in that fake room. You're getting to the bottom of what's going on here."; new_line; .L_Say57; .L_SayX57;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_888, 888, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Instead of putting something which is not a passkey on a keychain ( this is the limiting keychains rule ): [ R_843 ; if ((((action ==##PutOn) && (actor==player) && ((noun ofclass K2_thing) && (~~((noun ofclass K16_passkey)))) && ((second ofclass K17_keychain))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_843, 843); ! [2: say ~[The noun] [are] not a key.~ ( a )] say__p=1;! [3: ~[The noun] [are] not a key.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_139); new_line; .L_Say58; .L_SayX58;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_843, 843, 'action'); rfalse; ]; ! No specific request ! Instead of listening to the Mysterious Room: [ R_854 ; if ((((action ==##Listen) && (actor==player) && ((noun == I128_mysterious_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_854, 854); ! [2: say ~You hear a faint hum of machinery somewhere.~] say__p=1;! [3: ~You hear a faint hum of machinery somewhere.~] ParaContent(); print "You hear a faint hum of machinery somewhere."; new_line; .L_Say59; .L_SayX59;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_854, 854, 'action'); rfalse; ]; ! No specific request ! Instead of smelling the Mysterious Room: [ R_855 ; if ((((action ==##Smell) && (actor==player) && ((noun == I128_mysterious_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_855, 855); ! [2: say ~The room smells vaguely of cleaning agents.~] say__p=1;! [3: ~The room smells vaguely of cleaning agents.~] ParaContent(); print "The room smells vaguely of cleaning agents."; new_line; .L_Say60; .L_SayX60;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_855, 855, 'action'); rfalse; ]; ! No specific request ! Instead of going south: [ R_856 ; if ((((action ==##Go) && (actor==player) && ((noun == I54_south) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_856, 856); ! [2: if solved is 1 and the player is in the mysterious room] if (((((Global_Vars-->12) == 1))) && (((I128_mysterious_room == ContainerOf(player))))) {! [3: say ~[one of]You stare, then blink rapidly for a few seconds. The door you just came through is gone. In its place is another blank wall, with no sign anything else was ever there.[or]Just a blank wall... probably.[stopping]~] say__p=1;! [4: one of] ParaContent(); if (I7_ST_say_one_flag-->2 == false) { I7_ST_say_one_of-->2 = i7_soo_stop(I7_ST_say_one_of-->2, 2); I7_ST_say_one_flag-->2 = true; } if (say__comp == false) I7_ST_say_one_flag-->2 = false; switch ((I7_ST_say_one_of-->2)%(2+1)-1) { 0:! [5: ~You stare, then blink rapidly for a few seconds. The door you just came through is gone. In its place is another blank wall, with no sign anything else was ever there.~] ParaContent(); print "You stare, then blink rapidly for a few seconds. The door you just came through is gone. In its place is another blank wall, with no sign anything else was ever there."; new_line;! [6: or] ParaContent(); @nop; 1:! [7: ~Just a blank wall... probably.~] ParaContent(); print "Just a blank wall... probably."; new_line;! [8: stopping] ParaContent(); } .L_Say61; .L_SayX61;} else { ! [9: say ~Just a blank wall in that direction.~] say__p=1;! [10: ~Just a blank wall in that direction.~] ParaContent(); print "Just a blank wall in that direction."; new_line; .L_Say62; .L_SayX62;} RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_856, 856, 'action'); rfalse; ]; ! No specific request ! Instead of taking the lamp: [ R_864 ; if ((((action ==##Take) && (actor==player) && ((noun == I129_halogen_lamp) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_864, 864); ! [2: say ~You can't reach it.~] say__p=1;! [3: ~You can't reach it.~] ParaContent(); print "You can't reach it."; new_line; .L_Say63; .L_SayX63;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_864, 864, 'action'); rfalse; ]; ! No specific request ! Instead of opening the journal: [ R_866 ; if ((((action ==##Open) && (actor==player) && ((noun == I134_journal) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_866, 866); ! [2: try examining the journal] TryAction(0, player, ##Examine, I134_journal, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_866, 866, 'action'); rfalse; ]; ! No specific request ! Instead of opening the compartment: [ R_868 ; if ((((action ==##Open) && (actor==player) && ((noun == I144_velvet_compartment) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_868, 868); ! [2: if the compartment is closed] if ((((Adj_75_t1_v10(I144_velvet_compartment))))) {! [3: say ~It's shut tight.~] say__p=1;! [4: ~It's shut tight.~] ParaContent(); print "It's shut tight."; new_line; .L_Say64; .L_SayX64;} else { ! [5: say ~It's already open.~] say__p=1;! [6: ~It's already open.~] ParaContent(); print "It's already open."; new_line; .L_Say65; .L_SayX65;} RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_868, 868, 'action'); rfalse; ]; ! No specific request ! Instead of pushing the left switch: [ R_875 ; if ((((action ==##Push) && (actor==player) && ((noun == I150_left_switch) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_875, 875); ! [2: try switching on the left switch] TryAction(0, player, ##SwitchOn, I150_left_switch, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_875, 875, 'action'); rfalse; ]; ! No specific request ! Instead of pushing the right switch: [ R_877 ; if ((((action ==##Push) && (actor==player) && ((noun == I151_right_switch) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_877, 877); ! [2: try switching on the right switch] TryAction(0, player, ##SwitchOn, I151_right_switch, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_877, 877, 'action'); rfalse; ]; ! No specific request ! Instead of attacking the slide puzzle box: [ R_880 ; if ((((action ==##Attack) && (actor==player) && ((noun == I161_slide_puzzle_box) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_880, 880); ! [2: if the hammer is carried by the player] if (((player == CarrierOf(I162_hammer)))) {! [3: say ~You line the hammer up carefully, and give the strongest blow you can deliver to the box. The box does indeed smash open... and the hammer's head comes off, leaving you holding the useless handle. Oh well.~] say__p=1;! [4: ~You line the hammer up carefully, and give the strongest blow you can deliver to the box. The box does indeed smash open... and the hammer's head comes off, leaving you holding the useless handle. Oh well.~] ParaContent(); print "You line the hammer up carefully, and give the strongest blow you can deliver to the box. The box does indeed smash open... and the hammer's head comes off, leaving you holding the useless handle. Oh well."; new_line; .L_Say66; .L_SayX66;! [5: now the hammer is nowhere] RemoveFromPlay(I162_hammer);; ! [6: now the slide puzzle box is open] (Adj_74_t2_v10(I161_slide_puzzle_box)); ! [7: if the strange machine is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I142_strange_machine)))) {! [8: now the wide key is in the slide puzzle box] MoveObject(I146_wide_key,I161_slide_puzzle_box); } ! [9: if the electronic keypad is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I147_electronic_keypad)))) {! [10: now a printed slip is in the slide puzzle box] MoveObject(I148_printed_slip,I161_slide_puzzle_box); } ! [11: if the block of ice is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I153_block_of_ice)))) {! [12: now an orange berry is in the slide puzzle box] MoveObject(I157_orange_berry,I161_slide_puzzle_box); } ! [13: if the pair of lights is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I149_pair_of_lights)))) {! [14: now a thin key is in the slide puzzle box] MoveObject(I131_thin_key,I161_slide_puzzle_box); } } else { ! [15: say ~You pound on the box with your fist, but it does little. You're going to need something more solid to break this thing open.~] say__p=1;! [16: ~You pound on the box with your fist, but it does little. You're going to need something more solid to break this thing open.~] ParaContent(); print "You pound on the box with your fist, but it does little. You're going to need something more solid to break this thing open."; new_line; .L_Say67; .L_SayX67;} RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_880, 880, 'action'); rfalse; ]; ! No specific request ! Instead of attacking the block of ice: [ R_881 ; if ((((action ==##Attack) && (actor==player) && ((noun == I153_block_of_ice) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_881, 881); ! [2: if the hammer is carried by the player] if (((player == CarrierOf(I162_hammer)))) {! [3: say ~Good thinking, but you're not confident that the ice will give before the hammer.~] say__p=1;! [4: ~Good thinking, but you're not confident that the ice will give before the hammer.~] ParaContent(); print "Good thinking, but you're not confident that the ice will give before the hammer."; new_line; .L_Say68; .L_SayX68;} else { ! [5: say ~You highly doubt your fists are going to crack that block.~] say__p=1;! [6: ~You highly doubt your fists are going to crack that block.~] ParaContent(); print "You highly doubt your fists are going to crack that block."; new_line; .L_Say69; .L_SayX69;} RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_881, 881, 'action'); rfalse; ]; ! No specific request ! Instead of taking the wooden box: [ R_883 ; if ((((action ==##Take) && (actor==player) && ((noun == I164_wooden_box) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_883, 883); ! [2: say ~It's fixed in place.~] say__p=1;! [3: ~It's fixed in place.~] ParaContent(); print "It's fixed in place."; new_line; .L_Say70; .L_SayX70;! [4: stop the action] rtrue; RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_883, 883, 'action'); rfalse; ]; ! No specific request ! Instead of attacking the wall: [ R_885 ; if ((((action ==##Attack) && (actor==player) && ((noun == I166_wall) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_885, 885); ! [2: say ~You doubt whoever put you in here is interested in your noisemaking, or that the walls will give in to your blows.~] say__p=1;! [3: ~You doubt whoever put you in here is interested in your noisemaking, or that the walls will give in to your blows.~] ParaContent(); print "You doubt whoever put you in here is interested in your noisemaking, or that the walls will give in to your blows."; new_line; .L_Say71; .L_SayX71;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_885, 885, 'action'); rfalse; ]; ! No specific request ! Instead of touching the wall: [ R_886 ; if ((((action ==##Touch) && (actor==player) && ((noun == I166_wall) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_886, 886); ! [2: say ~With some hesitation, you put a hand on the wall. But not on the wall... your hand is in the wall, but you feel nothing in that space, nothing but some warmth, some warmth like under a spotlight... you put your arm through, then both arms, then you plunge through the wall...[paragraph break]~] say__p=1;! [3: ~With some hesitation, you put a hand on the wall. But not on the wall... your hand is in the wall, but you feel nothing in that space, nothing but some warmth, some warmth like under a spotlight... you put your arm through, then both arms, then you plunge through the wall...~] ParaContent(); print "With some hesitation, you put a hand on the wall. But not on the wall... your hand is in the wall, but you feel nothing in that space, nothing but some warmth, some warmth like under a spotlight... you put your arm through, then both arms, then you plunge through the wall...";! [4: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say72; .L_SayX72;! [5: now the player is in the testing area] MoveObject(player,I168_testing_area); ! [6: stop the action] rtrue; RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_886, 886, 'action'); rfalse; ]; ! No specific request ! Instead of taking the equipment: [ R_889 ; if ((((action ==##Take) && (actor==player) && ((noun == I171_equipment) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_889, 889); ! [2: say ~You can't grasp it in any sense of the word.~] say__p=1;! [3: ~You can't grasp it in any sense of the word.~] ParaContent(); print "You can't grasp it in any sense of the word."; new_line; .L_Say73; .L_SayX73;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_889, 889, 'action'); rfalse; ]; ! No specific request ! Instead of taking the fake room: [ R_890 ; if ((((action ==##Take) && (actor==player) && ((noun == I173_fake_room) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_890, 890); ! [2: say ~You couldn't even if it was real, and wouldn't even if you could.~] say__p=1;! [3: ~You couldn't even if it was real, and wouldn't even if you could.~] ParaContent(); print "You couldn't even if it was real, and wouldn't even if you could."; new_line; .L_Say74; .L_SayX74;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_890, 890, 'action'); rfalse; ]; ! No specific request ! Instead of entering the first staircase: [ R_896 ; if ((((action ==##Enter) && (actor==player) && ((noun == I174_first_staircase) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_896, 896); ! [2: try going up] TryAction(0, player, ##Go, I59_up, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_896, 896, 'action'); rfalse; ]; ! No specific request ! Instead of climbing the first staircase: [ R_897 ; if ((((action ==##Climb) && (actor==player) && ((noun == I174_first_staircase) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_897, 897); ! [2: try going up] TryAction(0, player, ##Go, I59_up, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_897, 897, 'action'); rfalse; ]; ! No specific request ! Instead of entering the second staircase: [ R_900 ; if ((((action ==##Enter) && (actor==player) && ((noun == I178_second_staircase) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_900, 900); ! [2: try going up] TryAction(0, player, ##Go, I59_up, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_900, 900, 'action'); rfalse; ]; ! No specific request ! Instead of climbing the second staircase: [ R_901 ; if ((((action ==##Climb) && (actor==player) && ((noun == I178_second_staircase) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_901, 901); ! [2: try going up] TryAction(0, player, ##Go, I59_up, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_901, 901, 'action'); rfalse; ]; ! No specific request ! Instead of attacking the window: [ R_905 ; if ((((action ==##Attack) && (actor==player) && ((noun == I188_window) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_905, 905); ! [2: say ~That would be useless, you just came from that way and it's a 20 foot drop at best. The only viable exit is on the other side of the room.~] say__p=1;! [3: ~That would be useless, you just came from that way and it's a 20 foot drop at best. The only viable exit is on the other side of the room.~] ParaContent(); print "That would be useless, you just came from that way and it's a 20 foot drop at best. The only viable exit is on the other side of the room."; new_line; .L_Say75; .L_SayX75;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_905, 905, 'action'); rfalse; ]; ! No specific request ! Instead of taking the table: [ R_906 ; if ((((action ==##Take) && (actor==player) && ((noun == I160_table) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_906, 906); ! [2: say ~That would not be a constructive action right now.~] say__p=1;! [3: ~That would not be a constructive action right now.~] ParaContent(); print "That would not be a constructive action right now."; new_line; .L_Say76; .L_SayX76;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_906, 906, 'action'); rfalse; ]; ! No specific request ! Instead of opening the wooden door: [ R_907 ; if ((((action ==##Open) && (actor==player) && ((noun == I184_wooden_door) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_907, 907); ! [2: say ~As you move for the door, the man stands up and reaches for his waist, and for the first time you notice the holstered gun on his hip. You freeze, thinking frantically about how you can get past the man.~] say__p=1;! [3: ~As you move for the door, the man stands up and reaches for his waist, and for the first time you notice the holstered gun on his hip. You freeze, thinking frantically about how you can get past the man.~] ParaContent(); print "As you move for the door, the man stands up and reaches for his waist, and for the first time you notice the holstered gun on his hip. You freeze, thinking frantically about how you can get past the man."; new_line; .L_Say77; .L_SayX77;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_907, 907, 'action'); rfalse; ]; ! No specific request ! Instead of entering the door: [ R_863 ; if ((((action ==##Enter) && (actor==player) && ((noun ofclass K4_door))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_863, 863); ! [2: try going north] TryAction(0, player, ##Go, I51_north, 0); RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_863, 863, 'action'); rfalse; ]; ! No specific request ! Instead of escaping: [ R_867 ; if ((((action ==##A79_escaping) && (actor==player)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_867, 867); ! [2: say ~Sadly, it's not quite that easy.~] say__p=1;! [3: ~Sadly, it's not quite that easy.~] ParaContent(); print "Sadly, it's not quite that easy."; new_line; .L_Say78; .L_SayX78;RulebookFails(); rtrue; } else if (debug_rules > 1) DB_Rule(R_867, 867, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: After (B23_after) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! After unlocking the beige door with the thin key: ! === equally specific with === ! Rule 2/6 ! After unlocking the lockbox with the wide key: ! === equally specific with === ! Rule 3/6 ! After putting orange berry on the block of ice: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 4/6 ! After typing Code: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 5/6 ! After examining an identified passkey ( this is the passkey description rule ): ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 6/6 ! After hinting more than seven times: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! After unlocking the beige door with the thin key: [ R_865 ; if ((((action ==##Unlock) && (actor==player) && ((noun == I130_beige_door) && (true)) && ((second == I131_thin_key) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_865, 865); ! [2: say ~[one of]The thin key snaps in two right as you finish turning it.[or]The thin key sticks in the lock, and you cannot pull it out no matter how hard you try.[purely at random]~] say__p=1;! [3: one of] ParaContent(); if (I7_ST_say_one_flag-->3 == false) { I7_ST_say_one_of-->3 = i7_soo_par(I7_ST_say_one_of-->3, 2); I7_ST_say_one_flag-->3 = true; } if (say__comp == false) I7_ST_say_one_flag-->3 = false; switch ((I7_ST_say_one_of-->3)%(2+1)-1) { 0:! [4: ~The thin key snaps in two right as you finish turning it.~] ParaContent(); print "The thin key snaps in two right as you finish turning it."; new_line;! [5: or] ParaContent(); @nop; 1:! [6: ~The thin key sticks in the lock, and you cannot pull it out no matter how hard you try.~] ParaContent(); print "The thin key sticks in the lock, and you cannot pull it out no matter how hard you try."; new_line;! [7: purely at random] ParaContent(); } .L_Say79; .L_SayX79;! [8: now the thin key is nowhere] RemoveFromPlay(I131_thin_key);; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_865, 865, 'action'); rfalse; ]; ! No specific request ! After unlocking the lockbox with the wide key: [ R_869 ; if ((((action ==##Unlock) && (actor==player) && ((noun == I163_lockbox) && (true)) && ((second == I146_wide_key) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_869, 869); ! [2: say ~The wide key snaps as you finish turning it, and you pull out only one half of the key. You throw it away.~] say__p=1;! [3: ~The wide key snaps as you finish turning it, and you pull out only one half of the key. You throw it away.~] ParaContent(); print "The wide key snaps as you finish turning it, and you pull out only one half of the key. You throw it away."; new_line; .L_Say80; .L_SayX80;! [4: now the wide key is nowhere] RemoveFromPlay(I146_wide_key);; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_869, 869, 'action'); rfalse; ]; ! No specific request ! After putting orange berry on the block of ice: [ R_879 ; if ((((action ==##PutOn) && (actor==player) && ((noun == I157_orange_berry) && (true)) && ((second == I153_block_of_ice) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_879, 879); ! [2: if the lockbox is on the table or the lockbox is on the desk] if ((((I160_table == SupporterOf(I163_lockbox)))) || (((I158_desk == SupporterOf(I163_lockbox))))) {! [3: say ~The block of ice, in spite of the cold air being blasted at it, begins to steam and melt away. After about a minute, it's nothing but a puddle. A wide key is ripe for the taking now.~] say__p=1;! [4: ~The block of ice, in spite of the cold air being blasted at it, begins to steam and melt away. After about a minute, it's nothing but a puddle. A wide key is ripe for the taking now.~] ParaContent(); print "The block of ice, in spite of the cold air being blasted at it, begins to steam and melt away. After about a minute, it's nothing but a puddle. A wide key is ripe for the taking now."; new_line; .L_Say81; .L_SayX81;! [5: now the wide key is on the block of ice] MoveObject(I146_wide_key,I153_block_of_ice); } else { ! [6: say ~The block of ice, in spite of the cold air being blasted at it, begins to steam and melt away. After about a minute, it's nothing but a puddle. A thin key is ripe for the taking now.~] say__p=1;! [7: ~The block of ice, in spite of the cold air being blasted at it, begins to steam and melt away. After about a minute, it's nothing but a puddle. A thin key is ripe for the taking now.~] ParaContent(); print "The block of ice, in spite of the cold air being blasted at it, begins to steam and melt away. After about a minute, it's nothing but a puddle. A thin key is ripe for the taking now."; new_line; .L_Say82; .L_SayX82;! [8: now the thin key is on the block of ice] MoveObject(I131_thin_key,I153_block_of_ice); } ! [9: now the printed name of the block of ice is ~puddle~] BlkValueCopy(GProperty(10, I153_block_of_ice,short_name), TX_L_151); RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_879, 879, 'action'); rfalse; ]; ! No specific request ! After typing Code: [ R_873 ; if ((((action ==##A80_typing) && (actor==player) && ((parsed_number == (Global_Vars-->19)) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_873, 873); ! [2: if the electronic keypad is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I147_electronic_keypad)))) {! [3: say ~The keypad emits a pleasant beep, and you hear the door's lock click open.~] say__p=1;! [4: ~The keypad emits a pleasant beep, and you hear the door's lock click open.~] ParaContent(); print "The keypad emits a pleasant beep, and you hear the door's lock click open."; new_line; .L_Say83; .L_SayX83;! [5: now the beige door is unlocked] (Adj_80_t2_v10(I130_beige_door)); ! [6: stop the action] rtrue; } else { ! [7: say ~There's nothing to type on.~] say__p=1;! [8: ~There's nothing to type on.~] ParaContent(); print "There's nothing to type on."; new_line; .L_Say84; .L_SayX84;} RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_873, 873, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! After examining an identified passkey ( this is the passkey description rule ): [ R_838 ; if ((((action ==##Examine) && (actor==player) && ((noun ofclass K16_passkey) && ((Adj_43_t1_v10(noun))))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_838, 838); ! [2: say ~[The noun] [unlock] [the list of things unbolted by the noun].~ ( a )] say__p=1;! [3: ~[The noun] [unlock] [the list of things unbolted by the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_140); new_line; .L_Say85; .L_SayX85;RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_838, 838, 'action'); rfalse; ]; ! No specific request ! After hinting more than seven times: [ R_920 ; if ((PAPR_0() && (((TimesActionHasHappened-->0) > 7) && (ActionCurrentlyHappeningFlag->0)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_920, 920); ! [2: say ~Final hint: The solution is: TOUCH WALL. The rest will be obvious.~] say__p=1;! [3: ~Final hint: The solution is: TOUCH WALL. The rest will be obvious.~] ParaContent(); print "Final hint: The solution is: TOUCH WALL. The rest will be obvious."; new_line; .L_Say86; .L_SayX86;RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_920, 920, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: does the player mean (B25_does_the_player_mean) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Does the player mean taking something which is carried by the player ( this is the very unlikely to mean taking what's already carried rule ): ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 2/2 ! Does the player mean taking off something worn: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Does the player mean taking something which is carried by the player ( this is the very unlikely to mean taking what's already carried rule ): [ R_38 ; if ((((action ==##Take) && (actor==player) && ((noun ofclass K2_thing) && (player == CarrierOf(noun)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_38, 38); ! [2: it is very unlikely] RulebookSucceeds(22, RBNO_10); rtrue; } else if (debug_rules > 1) DB_Rule(R_38, 38, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Does the player mean taking off something worn: [ R_242 ; if ((((action ==##Disrobe) && (actor==player) && ((noun ofclass K2_thing) && ((Adj_0_t1_v10(noun))))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_242, 242); ! [2: it is very likely] RulebookSucceeds(22, RBNO_6); rtrue; } else if (debug_rules > 1) DB_Rule(R_242, 242, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Printing the name (B29_before_printing_the_name) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Before printing the name of a thing ( called the item being printed ) ( this is the make named things mentioned rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Before printing the name of a thing ( called the item being printed ) ( this is the make named things mentioned rule ): [ R_66 tmp_0 ! Let/loop value, e.g., 'item being printed': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_66, 66); ! [2: if expanding text for comparison purposes] if ((say__comp)) {! [3: continue the activity] rfalse; } ! [4: now the item being printed is mentioned] (Adj_69_t2_v10(tmp_0)); } else if (debug_rules > 1) DB_Rule(R_66, 66, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Printing the name (B31_after_printing_the_name) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! After printing the name of an identified passkey ( called the item ) while taking inventory ( this is the identify passkeys in inventory rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! After printing the name of an identified passkey ( called the item ) while taking inventory ( this is the identify passkeys in inventory rule ): [ R_837 tmp_0 ! Let/loop value, e.g., 'item': passkey ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K16_passkey) && ((Adj_43_t1_v10(parameter_value))) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (((((((action ==##Inv) && (actor==player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_837, 837); ! [2: now the prior named object is the item] prior_named_noun = tmp_0; ! [3: say ~ (which [open] [the list of things unbolted by the item])~ ( a )] say__p=1;! [4: ~ (which [open] [the list of things unbolted by the item])~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_141); .L_Say87; .L_SayX87;} else if (debug_rules > 1) DB_Rule(R_837, 837, 'context'); } else if (debug_rules > 1) DB_Rule(R_837, 837, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing the plural name (B33_for_printing_the_plural_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Rule for printing the plural name of something ( called the item ) ( this is the standard printing the plural name rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Rule for printing the plural name of something ( called the item ) ( this is the standard printing the plural name rule ): [ R_67 tmp_0 ! Let/loop value, e.g., 'item': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_67, 67); ! [2: say the printed plural name of the item] say__p=1;! [3: the printed plural name of the item] ParaContent(); @push self; print (TEXT_TY_Say) GProperty(10, self=tmp_0,plural);@pull self; .L_Say88; .L_SayX88;RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_67, 67, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing a number (B36_for_printing_a_number) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Rule for printing a number of something ( called the item ) ( this is the standard printing a number of something rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Rule for printing a number of something ( called the item ) ( this is the standard printing a number of something rule ): [ R_68 tmp_0 ! Let/loop value, e.g., 'item': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_68, 68); ! [2: say ~[listing group size in words] ~] say__p=1;! [3: listing group size in words] ParaContent(); print (number) say__n=(listing_size);! [4: ~ ~] ParaContent(); print " "; .L_Say89; .L_SayX89;! [5: carry out the printing the plural name activity with the item] CarryOutActivity(V1_printing_the_plural_name, tmp_0); RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_68, 68, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing the announcement of light (B66_for_printing_the_announc) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! This is the look around once light available rule: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! This is the look around once light available rule: [ R_69 ; if (debug_rules) DB_Rule(R_69, 69); ! [2: try looking] TryAction(0, player, ##Look, 0, 0); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: after Reading a command (B79_after_reading_a_command) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! After reading a command: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! After reading a command: [ R_909 ; if (debug_rules) DB_Rule(R_909, 909); ! [2: if the player is in the observation room] if (((I181_observation_room == ContainerOf(player)))) {! [3: now conversation is 1] (Global_Vars-->23) = 1; } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Deciding whether all includes (B87_for_deciding_whether_all) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Rule for deciding whether all includes a person while dropping or throwing or inserting or putting ( this is the exclude people from drop all rule ): ! >>> III - When/while requirement >>> ! Rule 2/6 ! Rule for deciding whether all includes scenery while taking or taking off or removing ( this is the exclude scenery from take all rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 3/6 ! Rule for deciding whether all includes things enclosed by the person reaching while taking or taking off or removing ( this is the exclude indirect possessions from take all rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 4/6 ! Rule for deciding whether all includes fixed in place things while taking or taking off or removing ( this is the exclude fixed in place things from take all rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 5/6 ! Rule for deciding whether all includes people while taking or taking off or removing ( this is the exclude people from take all rule ): ! >>> I - Number of aspects constrained >>> ! Rule 6/6 ! Rule for deciding whether all includes passkeys which are on a keychain ( this is the don't strip keys rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Rule for deciding whether all includes a person while dropping or throwing or inserting or putting ( this is the exclude people from drop all rule ): [ R_74 ; if (((((parameter_value ofclass K8_person))))) { ! Runs only when pattern matches if (((((((action ==##Drop) && (actor==player))))) || (((((action ==##ThrowAt) && (actor==player))))) || (((((action ==##Insert) && (actor==player))))) || (((((action ==##PutOn) && (actor==player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_74, 74); ! [2: it does not] RulebookFails(22, RBNO_11); rtrue; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_74, 74, 'context'); } else if (debug_rules > 1) DB_Rule(R_74, 74, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Rule for deciding whether all includes scenery while taking or taking off or removing ( this is the exclude scenery from take all rule ): [ R_70 ; if ((((((Adj_61_t1_v10(parameter_value))) && (true))))) { ! Runs only when pattern matches if (((((((action ==##Take) && (actor==player))))) || (((((action ==##Disrobe) && (actor==player))))) || (((((action ==##Remove) && (actor==player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_70, 70); ! [2: it does not] RulebookFails(22, RBNO_11); rtrue; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_70, 70, 'context'); } else if (debug_rules > 1) DB_Rule(R_70, 70, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Rule for deciding whether all includes things enclosed by the person reaching while taking or taking off or removing ( this is the exclude indirect possessions from take all rule ): [ R_73 ; if (((((parameter_value ofclass K2_thing) && (IndirectlyContains(actor,parameter_value)))))) { ! Runs only when pattern matches if (((((((action ==##Take) && (actor==player))))) || (((((action ==##Disrobe) && (actor==player))))) || (((((action ==##Remove) && (actor==player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_73, 73); ! [2: it does not] RulebookFails(22, RBNO_11); rtrue; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_73, 73, 'context'); } else if (debug_rules > 1) DB_Rule(R_73, 73, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Rule for deciding whether all includes fixed in place things while taking or taking off or removing ( this is the exclude fixed in place things from take all rule ): [ R_72 ; if (((((parameter_value ofclass K2_thing) && ((Adj_59_t1_v10(parameter_value))))))) { ! Runs only when pattern matches if (((((((action ==##Take) && (actor==player))))) || (((((action ==##Disrobe) && (actor==player))))) || (((((action ==##Remove) && (actor==player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_72, 72); ! [2: it does not] RulebookFails(22, RBNO_11); rtrue; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_72, 72, 'context'); } else if (debug_rules > 1) DB_Rule(R_72, 72, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Rule for deciding whether all includes people while taking or taking off or removing ( this is the exclude people from take all rule ): [ R_71 ; if (((((parameter_value ofclass K8_person))))) { ! Runs only when pattern matches if (((((((action ==##Take) && (actor==player))))) || (((((action ==##Disrobe) && (actor==player))))) || (((((action ==##Remove) && (actor==player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_71, 71); ! [2: it does not] RulebookFails(22, RBNO_11); rtrue; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_71, 71, 'context'); } else if (debug_rules > 1) DB_Rule(R_71, 71, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Rule for deciding whether all includes passkeys which are on a keychain ( this is the don't strip keys rule ): [ R_845 ; if (((((parameter_value ofclass K16_passkey) && (SupporterOf(parameter_value) ofclass K17_keychain))))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_845, 845); ! [2: if the second noun is not a keychain] if (((~~((second ofclass K17_keychain))))) {! [3: it does not] RulebookFails(22, RBNO_11); rtrue; } RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_845, 845, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Supplying a missing noun (B99_for_supplying_a_missing_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Rule for supplying a missing noun while an actor smelling ( this is the ambient odour rule ): ! === equally specific with === ! Rule 2/4 ! Rule for supplying a missing noun while an actor listening ( this is the ambient sound rule ): ! === equally specific with === ! Rule 3/4 ! Rule for supplying a missing noun while an actor going ( this is the block vaguely going rule ): ! --- now the last-placed rules --- ! Rule 4/4 ! Rule for supplying a missing noun while entering ( this is the find what to enter rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Rule for supplying a missing noun while an actor smelling ( this is the ambient odour rule ): [ R_75 ; if (((((((action ==##Smell) && (act_requester==nothing))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_75, 75); ! [2: now the noun is the touchability ceiling of the player] noun = TouchabilityCeiling(player); RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_75, 75, 'context'); rfalse; ]; ! From the Standard Rules ! No specific request ! Rule for supplying a missing noun while an actor listening ( this is the ambient sound rule ): [ R_76 ; if (((((((action ==##Listen) && (act_requester==nothing))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_76, 76); ! [2: now the noun is the touchability ceiling of the player] noun = TouchabilityCeiling(player); RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_76, 76, 'context'); rfalse; ]; ! From the Standard Rules ! No specific request ! Rule for supplying a missing noun while an actor going ( this is the block vaguely going rule ): [ R_77 ; if (((((((action ==##Go) && (act_requester==nothing))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_77, 77); ! [2: say ~You'll have to say which compass direction to go in.~ ( a )] say__p=1;! [3: ~You'll have to say which compass direction to go in.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_142); new_line; .L_Say90; .L_SayX90;RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_77, 77, 'context'); rfalse; ]; ! From the Standard Rules ! No specific request ! Rule for supplying a missing noun while entering ( this is the find what to enter rule ): [ R_162 tmp_0 ! Let/loop value, e.g., 'box': thing ; if (((((((action ==##Enter) && (actor==player))))))) { ! Runs only while condition holds if (debug_rules) DB_Rule(R_162, 162); ! [2: if something enterable ( called the box ) is in the location] if ((((Prop_1() && (tmp_0=deferred_calling_list-->0, true)) || (tmp_0 = 0,false)))) {! [3: now the noun is the box] noun = tmp_0; } else { ! [4: continue the activity] rfalse; } RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_162, 162, 'context'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Handling the final question (B116_before_handling_the_fin) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! This is the print the final question rule: ! === equally specific with === ! Rule 2/3 ! This is the print the final prompt rule: ! --- now the last-placed rules --- ! Rule 3/3: READ_FINAL_ANSWER_R ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! This is the print the final question rule: [ R_79 tmp_0 ! Let/loop value, e.g., 'named options count': number tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ct_0 ! currently selected table ct_1 ! currently selected row ; if (debug_rules) DB_Rule(R_79, 79); ! [2: let named options count be 0] tmp_0 = 0; ! [3: repeat through the table of final question options] @push ct_0; @push ct_1; for (tmp_1=T0_final_question_options, tmp_2=1, ct_0=tmp_1, ct_1=tmp_2: tmp_2<=TableRows(tmp_1): tmp_2++, ct_0=tmp_1, ct_1=tmp_2) if (TableRowIsBlank(ct_0, ct_1)==false) {! [4: if the only if victorious entry is false or the story has ended finally] if (((((TableLookUpEntry(ct_0,101,ct_1) && true) == (0 && true)))) || (((story_complete)))) {! [5: if there is a final response rule entry or the final response activity entry is not empty] if ((((ExistsTableLookUpEntry(ct_0,103,ct_1)))) || (((~~(((Adj_17_t1_v33(TableLookUpEntry(ct_0,104,ct_1))))))))) {! [6: if there is a final question wording entry] if (((ExistsTableLookUpEntry(ct_0,100,ct_1)))) {! [7: increase named options count by 1] tmp_0 = tmp_0 + 1;; } } } } @pull ct_1; @pull ct_0;! [8: if the named options count is less than 1] if (((tmp_0 < 1))) {! [9: abide by the immediately quit rule] if (FollowRulebook(IMMEDIATELY_QUIT_R)) rtrue; } ! [10: say ~Would you like to ~ ( a )] say__p=1;! [11: ~Would you like to ~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=ct_0),(LocalParking-->2=ct_1),(LocalParking-->3=tmp_1),(LocalParking-->4=tmp_2),TX_R_143); .L_Say91; .L_SayX91;! [12: repeat through the table of final question options] @push ct_0; @push ct_1; for (tmp_1=T0_final_question_options, tmp_2=1, ct_0=tmp_1, ct_1=tmp_2: tmp_2<=TableRows(tmp_1): tmp_2++, ct_0=tmp_1, ct_1=tmp_2) if (TableRowIsBlank(ct_0, ct_1)==false) {! [13: if the only if victorious entry is false or the story has ended finally] if (((((TableLookUpEntry(ct_0,101,ct_1) && true) == (0 && true)))) || (((story_complete)))) {! [14: if there is a final response rule entry or the final response activity entry is not empty] if ((((ExistsTableLookUpEntry(ct_0,103,ct_1)))) || (((~~(((Adj_17_t1_v33(TableLookUpEntry(ct_0,104,ct_1))))))))) {! [15: if there is a final question wording entry] if (((ExistsTableLookUpEntry(ct_0,100,ct_1)))) {! [16: say final question wording entry] say__p=1;! [17: final question wording entry] ParaContent(); print (TEXT_TY_Say) TableLookUpEntry(ct_0,100,ct_1); .L_Say92; .L_SayX92;! [18: decrease named options count by 1] tmp_0 = tmp_0 - 1;; ! [19: if the named options count is 1] if (((tmp_0 == 1))) {! [20: if the serial comma option is active] if ((((Adj_25_t1_v16(6))))) {! [21: say ~,~] say__p=1;! [22: ~,~] ParaContent(); print ","; .L_Say93; .L_SayX93;} ! [23: say ~ or ~ ( b )] say__p=1;! [24: ~ or ~ ( b )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=ct_0),(LocalParking-->2=ct_1),(LocalParking-->3=tmp_1),(LocalParking-->4=tmp_2),TX_R_144); .L_Say94; .L_SayX94;} else { ! [25: if the named options count is 0] if (((tmp_0 == 0))) {! [26: say ~?[line break]~] say__p=1;! [27: ~?~] ParaContent(); print "?";! [28: line break] ParaContent(); new_line; .L_Say95; .L_SayX95;} else { ! [29: say ~, ~] say__p=1;! [30: ~, ~] ParaContent(); print ", "; .L_Say96; .L_SayX96;} } } } } } @pull ct_1; @pull ct_0;rfalse; ]; ! From the Standard Rules ! No specific request ! This is the print the final prompt rule: [ R_78 ; if (debug_rules) DB_Rule(R_78, 78); ! [2: say ~> [run paragraph on]~ ( a )] say__p=1;! [3: ~> [run paragraph on]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_145); .L_Say97; .L_SayX97;rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Handling the final question (B117_for_handling_the_final_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! This is the standard respond to final question rule: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! This is the standard respond to final question rule: [ R_80 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value (deallocated by end of phrase) ct_0 ! currently selected table ct_1 ! currently selected row ; if (debug_rules) DB_Rule(R_80, 80); ! [2: repeat through the table of final question options] @push ct_0; @push ct_1; for (tmp_0=T0_final_question_options, tmp_1=1, ct_0=tmp_0, ct_1=tmp_1: tmp_1<=TableRows(tmp_0): tmp_1++, ct_0=tmp_0, ct_1=tmp_1) if (TableRowIsBlank(ct_0, ct_1)==false) {! [3: if the only if victorious entry is false or the story has ended finally] if (((((TableLookUpEntry(ct_0,101,ct_1) && true) == (0 && true)))) || (((story_complete)))) {! [4: if there is a final response rule entry or the final response activity entry is not empty] if ((((ExistsTableLookUpEntry(ct_0,103,ct_1)))) || (((~~(((Adj_17_t1_v33(TableLookUpEntry(ct_0,104,ct_1))))))))) {! [5: if the player's command matches the topic entry] if (((SnippetMatches(players_command, TableLookUpEntry(ct_0,102,ct_1))))) {! [6: if there is a final response rule entry] if (((ExistsTableLookUpEntry(ct_0,103,ct_1)))) {! [7: abide by final response rule entry] if (FollowRulebook(TableLookUpEntry(ct_0,103,ct_1))) rtrue; } else { ! [8: carry out the final response activity entry activity] CarryOutActivity(TableLookUpEntry(ct_0,104,ct_1)); } ! [9: rule succeeds] RulebookSucceeds(); rtrue; } } } } @pull ct_1; @pull ct_0;! [10: say ~Please give one of the answers above.~ ( a )] say__p=1;! [11: ~Please give one of the answers above.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=ct_0),(LocalParking-->1=ct_1),(LocalParking-->2=tmp_0),(LocalParking-->3=tmp_1),TX_R_146); new_line; .L_Say98; .L_SayX98;rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: before Printing the locale description (B119_before_printing_the_loc) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Before printing the locale description ( this is the initialise locale description rule ): ! === equally specific with === ! Rule 2/2 ! Before printing the locale description ( this is the find notable locale objects rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Before printing the locale description ( this is the initialise locale description rule ): [ R_83 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value (deallocated by end of phrase) ct_0 ! internal use only ct_1 ! internal use only ; if (debug_rules) DB_Rule(R_83, 83); ! [2: now the locale paragraph count is 0] (Global_Vars-->9) = 0; ! [3: repeat through the table of locale priorities] @push ct_0; @push ct_1; for (tmp_0=T1_locale_priorities, tmp_1=1, ct_0=tmp_0, ct_1=tmp_1: tmp_1<=TableRows(tmp_0): tmp_1++, ct_0=tmp_0, ct_1=tmp_1) if (TableRowIsBlank(ct_0, ct_1)==false) {! [4: blank out the whole row] TableBlankOutRow(ct_0, ct_1); } @pull ct_1; @pull ct_0;rfalse; ]; ! From the Standard Rules ! No specific request ! Before printing the locale description ( this is the find notable locale objects rule ): [ R_84 tmp_0 ! Let/loop value, e.g., 'domain': object ; if (debug_rules) DB_Rule(R_84, 84); ! [2: let the domain be the parameter-object] tmp_0 = parameter_value; ! [3: carry out the choosing notable locale objects activity with the domain] CarryOutActivity(V31_choosing_notable_locale_, tmp_0); ! [4: continue the activity] rfalse; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing the locale description (B120_for_printing_the_locale) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! For printing the locale description ( this is the interesting locale paragraphs rule ): ! === equally specific with === ! Rule 2/2 ! For printing the locale description ( this is the you-can-also-see rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! For printing the locale description ( this is the interesting locale paragraphs rule ): [ R_85 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ct_0 ! currently selected table ct_1 ! currently selected row ; if (debug_rules) DB_Rule(R_85, 85); ! [2: let the domain be the parameter-object] tmp_0 = parameter_value; ! [3: sort the table of locale priorities in locale description priority order] TableSort(T1_locale_priorities, 106, 1); ! [4: repeat through the table of locale priorities] @push ct_0; @push ct_1; for (tmp_1=T1_locale_priorities, tmp_2=1, ct_0=tmp_1, ct_1=tmp_2: tmp_2<=TableRows(tmp_1): tmp_2++, ct_0=tmp_1, ct_1=tmp_2) if (TableRowIsBlank(ct_0, ct_1)==false) {! [5: carry out the printing a locale paragraph about activity with the notable-object entry] CarryOutActivity(V32_printing_a_locale_paragr, TableLookUpEntry(ct_0,105,ct_1)); } @pull ct_1; @pull ct_0;! [6: continue the activity] rfalse; RulebookSucceeds(); rtrue; rfalse; ]; ! From the Standard Rules ! No specific request ! For printing the locale description ( this is the you-can-also-see rule ): [ R_86 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'mentionable count': number tmp_2 ! Let/loop value (deallocated by end of phrase) tmp_3 ! Let/loop value (deallocated by end of phrase) tmp_4 ! Let/loop value (deallocated by end of phrase) tmp_5 ! Let/loop value (deallocated by end of phrase) ct_0 ! currently selected table ct_1 ! currently selected row ; if (debug_rules) DB_Rule(R_86, 86); ! [2: let the domain be the parameter-object] tmp_0 = parameter_value; ! [3: let the mentionable count be 0] tmp_1 = 0; ! [4: repeat with item running through things] for (tmp_2=Prop_2(0), tmp_3=Prop_2(tmp_2): tmp_2: tmp_2=tmp_3, tmp_3=Prop_2(tmp_3)) {! [5: now the item is not marked for listing] (Adj_67_t3_v10(tmp_2)); } ! [6: repeat through the table of locale priorities] @push ct_0; @push ct_1; for (tmp_2=T1_locale_priorities, tmp_3=1, ct_0=tmp_2, ct_1=tmp_3: tmp_3<=TableRows(tmp_2): tmp_3++, ct_0=tmp_2, ct_1=tmp_3) if (TableRowIsBlank(ct_0, ct_1)==false) {! [7: if the locale description priority entry is greater than 0] if (((TableLookUpEntry(ct_0,106,ct_1) > 0))) {! [8: now the notable-object entry is marked for listing] (Adj_67_t2_v10(TableLookUpEntry(ct_0,105,ct_1))); } ! [9: increase the mentionable count by 1] tmp_1 = tmp_1 + 1;; } @pull ct_1; @pull ct_0;! [10: if the mentionable count is greater than 0] if (((tmp_1 > 0))) {! [11: repeat with item running through things] for (tmp_2=Prop_3(0), tmp_3=Prop_3(tmp_2): tmp_2: tmp_2=tmp_3, tmp_3=Prop_3(tmp_3)) {! [12: if the item is mentioned] if ((((Adj_69_t1_v10(tmp_2))))) {! [13: now the item is not marked for listing] (Adj_67_t3_v10(tmp_2)); } } ! [14: begin the listing nondescript items activity with the domain] BeginActivity(V8_listing_nondescript_items, tmp_0); ! [15: if the number of marked for listing things is 0] if ((((Prop_4()) == 0))) {! [16: abandon the listing nondescript items activity with the domain] AbandonActivity(V8_listing_nondescript_items, tmp_0); } else { ! [17: if handling the listing nondescript items activity with the domain] if (((~~(ForActivity(V8_listing_nondescript_items, tmp_0))))) {! [18: if the domain is the location] if (((tmp_0 == real_location))) {! [19: say ~[We] ~ ( a )] say__p=1;! [20: ~[We] ~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),(LocalParking-->3=tmp_3),(LocalParking-->4=ct_0),(LocalParking-->5=ct_1),TX_R_147); .L_Say99; .L_SayX99;} else { ! [21: if the domain is a supporter or the domain is an animal] if ((((tmp_0 ofclass K6_supporter))) || (((tmp_0 ofclass K12_animal)))) {! [22: say ~On [the domain] [we] ~ ( b )] say__p=1;! [23: ~On [the domain] [we] ~ ( b )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),(LocalParking-->3=tmp_3),(LocalParking-->4=ct_0),(LocalParking-->5=ct_1),TX_R_148); .L_Say100; .L_SayX100;} else { ! [24: say ~In [the domain] [we] ~ ( c )] say__p=1;! [25: ~In [the domain] [we] ~ ( c )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),(LocalParking-->3=tmp_3),(LocalParking-->4=ct_0),(LocalParking-->5=ct_1),TX_R_149); .L_Say101; .L_SayX101;} } ! [26: if the locale paragraph count is greater than 0] if ((((Global_Vars-->9) > 0))) {! [27: say ~[regarding the player][can] also see ~ ( d )] say__p=1;! [28: ~[regarding the player][can] also see ~ ( d )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),(LocalParking-->3=tmp_3),(LocalParking-->4=ct_0),(LocalParking-->5=ct_1),TX_R_150); .L_Say102; .L_SayX102;} else { ! [29: say ~[regarding the player][can] see ~ ( e )] say__p=1;! [30: ~[regarding the player][can] see ~ ( e )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),(LocalParking-->3=tmp_3),(LocalParking-->4=ct_0),(LocalParking-->5=ct_1),TX_R_151); .L_Say103; .L_SayX103;} ! [31: let the common holder be nothing] tmp_2 = nothing; ! [32: let contents form of list be true] tmp_3 = 1; ! [33: repeat with list item running through marked for listing things] for (tmp_4=Prop_5(0), tmp_5=Prop_5(tmp_4): tmp_4: tmp_4=tmp_5, tmp_5=Prop_5(tmp_5)) {! [34: if the holder of the list item is not the common holder] if (((~~(((HolderOf(tmp_4)) == tmp_2))))) {! [35: if the common holder is nothing] if (((tmp_2 == nothing))) {! [36: now the common holder is the holder of the list item] tmp_2 = (HolderOf(tmp_4)); } else { ! [37: now contents form of list is false] tmp_3 = 0; } } ! [38: if the list item is mentioned] if ((((Adj_69_t1_v10(tmp_4))))) {! [39: now the list item is not marked for listing] (Adj_67_t3_v10(tmp_4)); } } ! [40: filter list recursion to unmentioned things] list_filter_routine = Prop_6; ! [41: if contents form of list is true and the common holder is not nothing] if (((((tmp_3 && true) == (1 && true)))) && (((~~((tmp_2 == nothing)))))) {! [42: list the contents of the common holder , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , listing marked items only] WriteListFrom(child(tmp_2), 2776); } else { ! [43: say ~[a list of marked for listing things including contents]~] say__p=1;! [44: a list of marked for listing things including contents] ParaContent(); objectloop(tmp_4 ofclass Object) if (((tmp_4 ofclass K2_thing) && ((Adj_67_t1_v10(tmp_4))))) give tmp_4 workflag2; else give tmp_4 ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+ TERSE_BIT+CONCEAL_BIT); .L_Say104; .L_SayX104;} ! [45: if the domain is the location] if (((tmp_0 == real_location))) {! [46: say ~ here~ ( f )] say__p=1;! [47: ~ here~ ( f )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),(LocalParking-->3=tmp_3),(LocalParking-->4=ct_0),(LocalParking-->5=ct_1),(LocalParking-->6=tmp_4),(LocalParking-->7=tmp_5),TX_R_152); .L_Say105; .L_SayX105;} ! [48: say ~.[paragraph break]~] say__p=1;! [49: ~.~] ParaContent(); print ".";! [50: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say106; .L_SayX106;! [51: unfilter list recursion] list_filter_routine = 0; } ! [52: end the listing nondescript items activity with the domain] EndActivity(V8_listing_nondescript_items, tmp_0); } } ! [53: continue the activity] rfalse; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Choosing notable locale objects (B123_for_choosing_notable_lo) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! For choosing notable locale objects ( this is the standard notable locale objects rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! For choosing notable locale objects ( this is the standard notable locale objects rule ): [ R_87 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'held item': object ; if (debug_rules) DB_Rule(R_87, 87); ! [2: let the domain be the parameter-object] tmp_0 = parameter_value; ! [3: let the held item be the first thing held by the domain] tmp_1 = (child(tmp_0)); ! [4: while the held item is a thing] while (((tmp_1 ofclass K2_thing))) {! [5: set the locale priority of the held item to 5] (PHR_82_r0 (tmp_1,5)); ! [6: now the held item is the next thing held after the held item] tmp_1 = (sibling(tmp_1)); } ! [7: continue the activity] rfalse; RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Printing a locale paragraph about (B126_for_printing_a_locale_p) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/9 ! For printing a locale paragraph about a supporter ( called the tabletop ) ( this is the initial appearance on supporters rule ): ! >>> III.1 - Object To Which Rule Applies >>> ! Rule 2/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention player's supporter in room descriptions rule ): ! === equally specific with === ! Rule 3/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention scenery in room descriptions rule ): ! === equally specific with === ! Rule 4/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention undescribed items in room descriptions rule ): ! === equally specific with === ! Rule 5/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the set pronouns from items in room descriptions rule ): ! === equally specific with === ! Rule 6/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the offer items to writing a paragraph about rule ): ! === equally specific with === ! Rule 7/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the use initial appearance in room descriptions rule ): ! === equally specific with === ! Rule 8/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the describe what's on scenery supporters in room descriptions rule ): ! === equally specific with === ! Rule 9/9 ! For printing a locale paragraph about a thing ( called the item ) ( this is the describe what's on mentioned supporters in room descriptions rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a supporter ( called the tabletop ) ( this is the initial appearance on supporters rule ): [ R_94 tmp_0 ! Let/loop value, e.g., 'tabletop': supporter tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K6_supporter) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_94, 94); ! [2: repeat with item running through not handled things on the tabletop which provide the property initial appearance] for (tmp_1=Prop_7(tmp_0,tmp_0,tmp_0,0), tmp_2=Prop_7(tmp_0,tmp_0,tmp_0,tmp_1): tmp_1: tmp_1=tmp_2, tmp_2=Prop_7(tmp_0,tmp_0,tmp_0,tmp_2)) {! [3: if the item is not a person and the initial appearance of the item is not ~~ and the item is not undescribed] if ((((~~((tmp_1 ofclass K8_person))))) && ((((~~(( BlkValueCompare(GProperty(10, tmp_1,initial), EMPTY_TEXT_VALUE) == 0))))) && (((~~(((Adj_66_t1_v10(tmp_1))))))))) {! [4: now the item is mentioned] (Adj_69_t2_v10(tmp_1)); ! [5: say initial appearance of the item] say__p=1;! [6: initial appearance of the item] ParaContent(); @push self; print (TEXT_TY_Say) GProperty(10, self=tmp_1,initial);@pull self; .L_Say107; .L_SayX107;! [7: say paragraph break] say__p=1;! [8: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say108; .L_SayX108;} } ! [9: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_94, 94, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention player's supporter in room descriptions rule ): [ R_88 tmp_0 ! Let/loop value, e.g., 'item': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_88, 88); ! [2: if the item encloses the player] if (((IndirectlyContains(tmp_0,player)))) {! [3: set the locale priority of the item to 0] (PHR_82_r0 (tmp_0,0)); } ! [4: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_88, 88, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention scenery in room descriptions rule ): [ R_89 tmp_0 ! Let/loop value, e.g., 'item': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_89, 89); ! [2: if the item is scenery] if ((((Adj_61_t1_v10(tmp_0))))) {! [3: set the locale priority of the item to 0] (PHR_82_r0 (tmp_0,0)); } ! [4: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_89, 89, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the don't mention undescribed items in room descriptions rule ): [ R_90 tmp_0 ! Let/loop value, e.g., 'item': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_90, 90); ! [2: if the item is undescribed] if ((((Adj_66_t1_v10(tmp_0))))) {! [3: set the locale priority of the item to 0] (PHR_82_r0 (tmp_0,0)); } ! [4: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_90, 90, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the set pronouns from items in room descriptions rule ): [ R_91 tmp_0 ! Let/loop value, e.g., 'item': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_91, 91); ! [2: if the item is not mentioned] if (((~~(((Adj_69_t1_v10(tmp_0))))))) {! [3: set pronouns from the item] PronounNotice(tmp_0); } ! [4: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_91, 91, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the offer items to writing a paragraph about rule ): [ R_92 tmp_0 ! Let/loop value, e.g., 'item': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_92, 92); ! [2: if the item is not mentioned] if (((~~(((Adj_69_t1_v10(tmp_0))))))) {! [3: if a paragraph break is pending] if (((say__p))) {! [4: say ~[conditional paragraph break]~] say__p=1;! [5: conditional paragraph break] ParaContent(); DivideParagraphPoint(); .L_Say109; .L_SayX109;} ! [6: carry out the writing a paragraph about activity with the item] CarryOutActivity(V7_writing_a_paragraph_about, tmp_0); ! [7: if a paragraph break is pending] if (((say__p))) {! [8: increase the locale paragraph count by 1] (Global_Vars-->9) = (Global_Vars-->9) + 1;; ! [9: now the item is mentioned] (Adj_69_t2_v10(tmp_0)); ! [10: say ~[conditional paragraph break]~] say__p=1;! [11: conditional paragraph break] ParaContent(); DivideParagraphPoint(); .L_Say110; .L_SayX110;} } ! [12: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_92, 92, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the use initial appearance in room descriptions rule ): [ R_93 tmp_0 ! Let/loop value, e.g., 'item': thing tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_93, 93); ! [2: if the item is not mentioned] if (((~~(((Adj_69_t1_v10(tmp_0))))))) {! [3: if the item provides the property initial appearance and the item is not handled and the initial appearance of the item is not ~~] if ((((WhetherProvides(tmp_0, false, initial)))) && ((((~~(((Adj_64_t1_v10(tmp_0))))))) && (((~~(( BlkValueCompare(GProperty(10, tmp_0,initial), EMPTY_TEXT_VALUE) == 0))))))) {! [4: increase the locale paragraph count by 1] (Global_Vars-->9) = (Global_Vars-->9) + 1;; ! [5: say ~[initial appearance of the item]~] say__p=1;! [6: initial appearance of the item] ParaContent(); @push self; print (TEXT_TY_Say) GProperty(10, self=tmp_0,initial);@pull self; .L_Say111; .L_SayX111;! [7: say ~[paragraph break]~] say__p=1;! [8: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say112; .L_SayX112;! [9: if a locale-supportable thing is on the item] if ((((Prop_8(tmp_0))))) {! [10: repeat with possibility running through things on the item] for (tmp_1=Prop_9(tmp_0,0), tmp_2=Prop_9(tmp_0,tmp_1): tmp_1: tmp_1=tmp_2, tmp_2=Prop_9(tmp_0,tmp_2)) {! [11: now the possibility is marked for listing] (Adj_67_t2_v10(tmp_1)); ! [12: if the possibility is mentioned] if ((((Adj_69_t1_v10(tmp_1))))) {! [13: now the possibility is not marked for listing] (Adj_67_t3_v10(tmp_1)); } } ! [14: say ~On [the item] ~ ( a )] say__p=1;! [15: ~On [the item] ~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_153); .L_Say113; .L_SayX113;! [16: list the contents of the item , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , prefacing with is/are , listing marked items only] WriteListFrom(child(tmp_0), 3800); ! [17: say ~.[paragraph break]~] say__p=1;! [18: ~.~] ParaContent(); print ".";! [19: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say114; .L_SayX114;} ! [20: now the item is mentioned] (Adj_69_t2_v10(tmp_0)); } } ! [21: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_93, 93, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the describe what's on scenery supporters in room descriptions rule ): [ R_96 tmp_0 ! Let/loop value, e.g., 'item': thing tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_96, 96); ! [2: if the item is scenery and the item does not enclose the player] if (((((Adj_61_t1_v10(tmp_0))))) && (((~~((IndirectlyContains(tmp_0,player))))))) {! [3: if a locale-supportable thing is on the item] if ((((Prop_10(tmp_0))))) {! [4: set pronouns from the item] PronounNotice(tmp_0); ! [5: repeat with possibility running through things on the item] for (tmp_1=Prop_11(tmp_0,0), tmp_2=Prop_11(tmp_0,tmp_1): tmp_1: tmp_1=tmp_2, tmp_2=Prop_11(tmp_0,tmp_2)) {! [6: now the possibility is marked for listing] (Adj_67_t2_v10(tmp_1)); ! [7: if the possibility is mentioned] if ((((Adj_69_t1_v10(tmp_1))))) {! [8: now the possibility is not marked for listing] (Adj_67_t3_v10(tmp_1)); } } ! [9: increase the locale paragraph count by 1] (Global_Vars-->9) = (Global_Vars-->9) + 1;; ! [10: say ~On [the item] ~ ( a )] say__p=1;! [11: ~On [the item] ~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_154); .L_Say115; .L_SayX115;! [12: list the contents of the item , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , prefacing with is/are , listing marked items only] WriteListFrom(child(tmp_0), 3800); ! [13: say ~.[paragraph break]~] say__p=1;! [14: ~.~] ParaContent(); print ".";! [15: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say116; .L_SayX116;} } ! [16: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_96, 96, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! For printing a locale paragraph about a thing ( called the item ) ( this is the describe what's on mentioned supporters in room descriptions rule ): [ R_97 tmp_0 ! Let/loop value, e.g., 'item': thing tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_97, 97); ! [2: if the item is mentioned and the item is not undescribed and the item is not scenery and the item does not enclose the player] if (((((Adj_69_t1_v10(tmp_0))))) && ((((~~(((Adj_66_t1_v10(tmp_0))))))) && ((((~~(((Adj_61_t1_v10(tmp_0))))))) && (((~~((IndirectlyContains(tmp_0,player))))))))) {! [3: if a locale-supportable thing is on the item] if ((((Prop_12(tmp_0))))) {! [4: set pronouns from the item] PronounNotice(tmp_0); ! [5: repeat with possibility running through things on the item] for (tmp_1=Prop_13(tmp_0,0), tmp_2=Prop_13(tmp_0,tmp_1): tmp_1: tmp_1=tmp_2, tmp_2=Prop_13(tmp_0,tmp_2)) {! [6: now the possibility is marked for listing] (Adj_67_t2_v10(tmp_1)); ! [7: if the possibility is mentioned] if ((((Adj_69_t1_v10(tmp_1))))) {! [8: now the possibility is not marked for listing] (Adj_67_t3_v10(tmp_1)); } } ! [9: increase the locale paragraph count by 1] (Global_Vars-->9) = (Global_Vars-->9) + 1;; ! [10: say ~On [the item] ~ ( a )] say__p=1;! [11: ~On [the item] ~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_155); .L_Say117; .L_SayX117;! [12: list the contents of the item , as a sentence , including contents , giving brief inventory information , tersely , not listing concealed items , prefacing with is/are , listing marked items only] WriteListFrom(child(tmp_0), 3800); ! [13: say ~.[paragraph break]~] say__p=1;! [14: ~.~] ParaContent(); print ".";! [15: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say118; .L_SayX118;} } ! [16: continue the activity] rfalse; RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_97, 97, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Taking inventory (B132_carry_out_taking_invent) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out taking inventory ( this is the print empty inventory rule ): ! === equally specific with === ! Rule 2/2 ! Carry out taking inventory ( this is the print standard inventory rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out taking inventory ( this is the print empty inventory rule ): [ R_98 ; if (actor == player) { if (debug_rules) DB_Rule(R_98, 98); ! [2: if the first thing held by the player is nothing] if ((((child(player)) == nothing))) {! [3: say ~[We] [are] carrying nothing.~ ( a )] say__p=1;! [4: ~[We] [are] carrying nothing.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_156); new_line; .L_Say119; .L_SayX119;rtrue; } } else if (debug_rules > 1) DB_Rule(R_98, 98, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out taking inventory ( this is the print standard inventory rule ): [ R_99 ; if (actor == player) { if (debug_rules) DB_Rule(R_99, 99); ! [2: say ~[We] [are] carrying:[line break]~ ( a )] say__p=1;! [3: ~[We] [are] carrying:[line break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_157); .L_Say120; .L_SayX120;! [4: list the contents of the player , with newlines , indented , including contents , giving inventory information , with extra indentation] WriteListFrom(child(player), 8215); } else if (debug_rules > 1) DB_Rule(R_99, 99, 'actor'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Taking inventory (B133_report_taking_inventory) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor taking inventory ( this is the report other people taking inventory rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor taking inventory ( this is the report other people taking inventory rule ): [ R_100 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_100, 100); ! [2: if the actor is not the player and the action is not silent] if ((((~~((actor == player))))) && (((keep_silent == false)))) {! [3: say ~[The actor] [look] through [their] possessions.~ ( a )] say__p=1;! [4: ~[The actor] [look] through [their] possessions.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_158); new_line; .L_Say121; .L_SayX121;} } else if (debug_rules > 1) DB_Rule(R_100, 100, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Taking (B134_check_taking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/12 ! Check an actor taking ( this is the can't take yourself rule ): ! === equally specific with === ! Rule 2/12 ! Check an actor taking ( this is the can't take other people rule ): ! === equally specific with === ! Rule 3/12 ! Check an actor taking ( this is the can't take component parts rule ): ! === equally specific with === ! Rule 4/12 ! Check an actor taking ( this is the can't take people's possessions rule ): ! === equally specific with === ! Rule 5/12 ! Check an actor taking ( this is the can't take items out of play rule ): ! === equally specific with === ! Rule 6/12 ! Check an actor taking ( this is the can't take what you're inside rule ): ! === equally specific with === ! Rule 7/12 ! Check an actor taking ( this is the can't take what's already taken rule ): ! === equally specific with === ! Rule 8/12 ! Check an actor taking ( this is the can't take scenery rule ): ! === equally specific with === ! Rule 9/12 ! Check an actor taking ( this is the can only take things rule ): ! === equally specific with === ! Rule 10/12 ! Check an actor taking ( this is the can't take what's fixed in place rule ): ! === equally specific with === ! Rule 11/12 ! Check an actor taking ( this is the use player's holdall to avoid exceeding carrying capacity rule ): ! === equally specific with === ! Rule 12/12 ! Check an actor taking ( this is the can't exceed carrying capacity rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take yourself rule ): [ R_101 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_101, 101); ! [2: if the actor is the noun] if (((actor == noun))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [are] always self-possessed.~ ( a )] say__p=1;! [5: ~[We] [are] always self-possessed.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_159); new_line; .L_Say122; .L_SayX122;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_101, 101, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take other people rule ): [ R_102 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_102, 102); ! [2: if the noun is a person] if (((noun ofclass K8_person))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~I don't suppose [the noun] [would care] for that.~ ( a )] say__p=1;! [5: ~I don't suppose [the noun] [would care] for that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_160); new_line; .L_Say123; .L_SayX123;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_102, 102, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take component parts rule ): [ R_103 tmp_0 ! Let/loop value, e.g., 'whole': thing ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_103, 103); ! [2: if the noun is part of something ( called the whole )] if ((((noun.component_parent) ofclass K2_thing) && (tmp_0=((noun.component_parent)), true))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][Those] [seem] to be a part of [the whole].~ ( a )] say__p=1;! [5: ~[regarding the noun][Those] [seem] to be a part of [the whole].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_161); new_line; .L_Say124; .L_SayX124;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_103, 103, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take people's possessions rule ): [ R_104 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'owner': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_104, 104); ! [2: let the local ceiling be the common ancestor of the actor with the noun] tmp_0 = (CommonAncestor(actor, noun)); ! [3: let the owner be the not-counting-parts holder of the noun] tmp_1 = (CoreOfParentOfCoreOf(noun)); ! [4: while the owner is not nothing and the owner is not the local ceiling] while ((((~~((tmp_1 == nothing))))) && (((~~((tmp_1 == tmp_0)))))) {! [5: if the owner is a person] if (((tmp_1 ofclass K8_person))) {! [6: if the actor is the player] if (((actor == player))) {! [7: say ~[regarding the noun][Those] [seem] to belong to [the owner].~ ( a )] say__p=1;! [8: ~[regarding the noun][Those] [seem] to belong to [the owner].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_162); new_line; .L_Say125; .L_SayX125;} ! [9: stop the action] rtrue; } ! [10: let the owner be the not-counting-parts holder of the owner] tmp_1 = (CoreOfParentOfCoreOf(tmp_1)); } } else if (debug_rules > 1) DB_Rule(R_104, 104, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take items out of play rule ): [ R_105 tmp_0 ! Let/loop value, e.g., 'H': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_105, 105); ! [2: let h be the noun] tmp_0 = noun; ! [3: while h is not nothing and h is not a room] while ((((~~((tmp_0 == nothing))))) && (((~~((tmp_0 ofclass K1_room)))))) {! [4: let h be the not-counting-parts holder of h] tmp_0 = (CoreOfParentOfCoreOf(tmp_0)); } ! [5: if h is nothing] if (((tmp_0 == nothing))) {! [6: if the actor is the player] if (((actor == player))) {! [7: say ~[regarding the noun][Those] [aren't] available.~ ( a )] say__p=1;! [8: ~[regarding the noun][Those] [aren't] available.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_163); new_line; .L_Say126; .L_SayX126;} ! [9: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_105, 105, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take what you're inside rule ): [ R_106 tmp_0 ! Let/loop value, e.g., 'local ceiling': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_106, 106); ! [2: let the local ceiling be the common ancestor of the actor with the noun] tmp_0 = (CommonAncestor(actor, noun)); ! [3: if the local ceiling is the noun] if (((tmp_0 == noun))) {! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[We] [would have] to get [if noun is a supporter]off[otherwise]out of[end if] [the noun] first.~ ( a )] say__p=1;! [6: ~[We] [would have] to get [if noun is a supporter]off[otherwise]out of[end if] [the noun] first.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_164); new_line; .L_Say127; .L_SayX127;} ! [7: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_106, 106, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take what's already taken rule ): [ R_107 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_107, 107); ! [2: if the actor is carrying the noun or the actor is wearing the noun] if ((((actor == CarrierOf(noun)))) || (((actor == WearerOf(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] already [have] [regarding the noun][those].~ ( a )] say__p=1;! [5: ~[We] already [have] [regarding the noun][those].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_165); new_line; .L_Say128; .L_SayX128;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_107, 107, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take scenery rule ): [ R_108 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_108, 108); ! [2: if the noun is scenery] if ((((Adj_61_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] hardly portable.~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] hardly portable.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_166); new_line; .L_Say129; .L_SayX129;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_108, 108, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can only take things rule ): [ R_109 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_109, 109); ! [2: if the noun is not a thing] if (((~~((noun ofclass K2_thing))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [cannot] carry [the noun].~ ( a )] say__p=1;! [5: ~[We] [cannot] carry [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_167); new_line; .L_Say130; .L_SayX130;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_109, 109, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't take what's fixed in place rule ): [ R_110 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_110, 110); ! [2: if the noun is fixed in place] if ((((Adj_59_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] fixed in place.~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] fixed in place.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_168); new_line; .L_Say131; .L_SayX131;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_110, 110, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the use player's holdall to avoid exceeding carrying capacity rule ): [ R_111 tmp_0 ! Let/loop value, e.g., 'current working sack': player's holdall tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) tmp_3 ! Let/loop value (deallocated by end of phrase) ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_111, 111); ! [2: if the number of things carried by the actor is at least the carrying capacity of the actor] if ((((Prop_14()) >= GProperty(10, actor,capacity)))) {! [3: if the actor is holding a player's holdall ( called the current working sack )] if ((((Prop_15() && (tmp_0=deferred_calling_list-->0, true)) || (tmp_0 = 0,false)))) {! [4: let the transferred item be nothing] tmp_1 = nothing; ! [5: repeat with the possible item running through things carried by the actor] for (tmp_2=Prop_16(0), tmp_3=Prop_16(tmp_2): tmp_2: tmp_2=tmp_3, tmp_3=Prop_16(tmp_3)) {! [6: if the possible item is not lit and the possible item is not the current working sack] if ((((~~(((Adj_55_t1_v10(tmp_2))))))) && (((~~((tmp_2 == tmp_0)))))) {! [7: let the transferred item be the possible item] tmp_1 = tmp_2; } } ! [8: if the transferred item is not nothing] if (((~~((tmp_1 == nothing))))) {! [9: if the actor is the player] if (((actor == player))) {! [10: say ~(putting [the transferred item] into [the current working sack] to make room)[command clarification break]~ ( a )] say__p=1;! [11: ~(putting [the transferred item] into [the current working sack] to make room)[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),(LocalParking-->3=tmp_3),TX_R_169); .L_Say132; .L_SayX132;} ! [12: silently try the actor trying inserting the transferred item into the current working sack] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Insert, tmp_1, tmp_0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [13: if the transferred item is not in the current working sack] if (((~~((tmp_0 == ContainerOf(tmp_1)))))) {! [14: stop the action] rtrue; } } } } } else if (debug_rules > 1) DB_Rule(R_111, 111, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking ( this is the can't exceed carrying capacity rule ): [ R_112 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_112, 112); ! [2: if the number of things carried by the actor is at least the carrying capacity of the actor] if ((((Prop_17()) >= GProperty(10, actor,capacity)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We]['re] carrying too many things already.~ ( a )] say__p=1;! [5: ~[We]['re] carrying too many things already.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_170); new_line; .L_Say133; .L_SayX133;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_112, 112, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Taking (B135_carry_out_taking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor taking ( this is the standard taking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor taking ( this is the standard taking rule ): [ R_113 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_113, 113); ! [2: now the actor carries the noun] MoveObject(noun,actor); ! [3: if the actor is the player] if (((actor == player))) {! [4: now the noun is handled] (Adj_64_t2_v10(noun)); } } else if (debug_rules > 1) DB_Rule(R_113, 113, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Taking (B136_report_taking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor taking ( this is the standard report taking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor taking ( this is the standard report taking rule ): [ R_114 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_114, 114); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~Taken.~ ( a )] say__p=1;! [5: ~Taken.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_171); new_line; .L_Say134; .L_SayX134;} else { ! [6: say ~[The actor] [pick] up [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [pick] up [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_172); new_line; .L_Say135; .L_SayX135;} } } else if (debug_rules > 1) DB_Rule(R_114, 114, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Removing it from (B137_check_removing_it_from) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check an actor taking ( this is the can't take component parts rule ): ! <<< I - Number of aspects constrained <<< ! Rule 2/4 ! Check an actor removing something from ( this is the can't remove what's not inside rule ): ! === equally specific with === ! Rule 3/4 ! Check an actor removing something from ( this is the can't remove from people rule ): ! === equally specific with === ! Rule 4/4 ! Check an actor removing something from ( this is the convert remove to take rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor removing something from ( this is the can't remove what's not inside rule ): [ R_115 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_115, 115); ! [2: if the holder of the noun is not the second noun] if (((~~(((HolderOf(noun)) == second))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~But [regarding the noun][they] [aren't] there now.~ ( a )] say__p=1;! [5: ~But [regarding the noun][they] [aren't] there now.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_173); new_line; .L_Say136; .L_SayX136;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_115, 115, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor removing something from ( this is the can't remove from people rule ): [ R_116 tmp_0 ! Let/loop value, e.g., 'owner': object ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_116, 116); ! [2: let the owner be the holder of the noun] tmp_0 = (HolderOf(noun)); ! [3: if the owner is a person] if (((tmp_0 ofclass K8_person))) {! [4: if the owner is the actor] if (((tmp_0 == actor))) {! [5: convert to the taking off action on the noun] return GVS_Convert(##Disrobe,noun,0); } ! [6: if the actor is the player] if (((actor == player))) {! [7: say ~[regarding the noun][Those] [seem] to belong to [the owner].~ ( a )] say__p=1;! [8: ~[regarding the noun][Those] [seem] to belong to [the owner].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_174); new_line; .L_Say137; .L_SayX137;} ! [9: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_116, 116, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor removing something from ( this is the convert remove to take rule ): [ R_117 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_117, 117); ! [2: convert to the taking action on the noun] return GVS_Convert(##Take,noun,0); } else if (debug_rules > 1) DB_Rule(R_117, 117, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Dropping (B140_check_dropping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check an actor dropping something which is part of the actor ( this is the can't drop body parts rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/6 ! Check an actor dropping ( this is the can't drop yourself rule ): ! === equally specific with === ! Rule 3/6 ! Check an actor dropping ( this is the can't drop what's already dropped rule ): ! === equally specific with === ! Rule 4/6 ! Check an actor dropping ( this is the can't drop what's not held rule ): ! === equally specific with === ! Rule 5/6 ! Check an actor dropping ( this is the can't drop clothes being worn rule ): ! === equally specific with === ! Rule 6/6 ! Check an actor dropping ( this is the can't drop if this exceeds carrying capacity rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor dropping something which is part of the actor ( this is the can't drop body parts rule ): [ R_119 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing) && (actor == (noun.component_parent)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_119, 119); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[We] [can't drop] part of [ourselves].~ ( a )] say__p=1;! [4: ~[We] [can't drop] part of [ourselves].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_175); new_line; .L_Say138; .L_SayX138;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_119, 119, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor dropping ( this is the can't drop yourself rule ): [ R_118 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_118, 118); ! [2: if the noun is the actor] if (((noun == actor))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [lack] the dexterity.~ ( a )] say__p=1;! [5: ~[We] [lack] the dexterity.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_176); new_line; .L_Say139; .L_SayX139;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_118, 118, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor dropping ( this is the can't drop what's already dropped rule ): [ R_120 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_120, 120); ! [2: if the noun is in the holder of the actor] if ((((HolderOf(actor)) == ContainerOf(noun)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [are] already here.~ ( a )] say__p=1;! [5: ~[The noun] [are] already here.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_177); new_line; .L_Say140; .L_SayX140;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_120, 120, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor dropping ( this is the can't drop what's not held rule ): [ R_121 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_121, 121); ! [2: if the actor is carrying the noun] if (((actor == CarrierOf(noun)))) {! [3: continue the action] rfalse; } ! [4: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [5: continue the action] rfalse; } ! [6: if the actor is the player] if (((actor == player))) {! [7: say ~[We] [haven't] got [regarding the noun][those].~ ( a )] say__p=1;! [8: ~[We] [haven't] got [regarding the noun][those].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_178); new_line; .L_Say141; .L_SayX141;} ! [9: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_121, 121, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor dropping ( this is the can't drop clothes being worn rule ): [ R_122 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_122, 122); ! [2: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~(first taking [the noun] off)[command clarification break]~ ( a )] say__p=1;! [5: ~(first taking [the noun] off)[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_179); .L_Say142; .L_SayX142;} ! [6: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Disrobe, noun, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [7: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [8: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_122, 122, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor dropping ( this is the can't drop if this exceeds carrying capacity rule ): [ R_123 tmp_0 ! Let/loop value, e.g., 'receptacle': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_123, 123); ! [2: let the receptacle be the holder of the actor] tmp_0 = (HolderOf(actor)); ! [3: if the receptacle is a room] if (((tmp_0 ofclass K1_room))) {! [4: continue the action] rfalse; } ! [5: if the receptacle provides the property carrying capacity] if (((WhetherProvides(tmp_0, false, capacity)))) {! [6: if the receptacle is a supporter] if (((tmp_0 ofclass K6_supporter))) {! [7: if the number of things on the receptacle is at least the carrying capacity of the receptacle] if ((((Prop_18(tmp_0)) >= GProperty(OBJECT_TY, tmp_0,capacity)))) {! [8: if the actor is the player] if (((actor == player))) {! [9: now the prior named object is nothing] prior_named_noun = nothing; ! [10: say ~[There] [are] no more room on [the receptacle].~ ( a )] say__p=1;! [11: ~[There] [are] no more room on [the receptacle].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_180); new_line; .L_Say143; .L_SayX143;} ! [12: stop the action] rtrue; } } else { ! [13: if the receptacle is a container] if (((tmp_0 ofclass K5_container))) {! [14: if the number of things in the receptacle is at least the carrying capacity of the receptacle] if ((((Prop_19(tmp_0)) >= GProperty(OBJECT_TY, tmp_0,capacity)))) {! [15: if the actor is the player] if (((actor == player))) {! [16: now the prior named object is nothing] prior_named_noun = nothing; ! [17: say ~[There] [are] no more room in [the receptacle].~ ( b )] say__p=1;! [18: ~[There] [are] no more room in [the receptacle].~ ( b )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_181); new_line; .L_Say144; .L_SayX144;} ! [19: stop the action] rtrue; } } } } } else if (debug_rules > 1) DB_Rule(R_123, 123, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Dropping (B141_carry_out_dropping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor dropping ( this is the standard dropping rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor dropping ( this is the standard dropping rule ): [ R_124 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_124, 124); ! [2: now the noun is in the holder of the actor] MoveObject(noun,(HolderOf(actor))); } else if (debug_rules > 1) DB_Rule(R_124, 124, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Dropping (B142_report_dropping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor dropping ( this is the standard report dropping rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor dropping ( this is the standard report dropping rule ): [ R_125 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_125, 125); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~Dropped.~ ( a )] say__p=1;! [5: ~Dropped.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_182); new_line; .L_Say145; .L_SayX145;} else { ! [6: say ~[The actor] [put] down [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [put] down [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_183); new_line; .L_Say146; .L_SayX146;} } } else if (debug_rules > 1) DB_Rule(R_125, 125, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Putting it on (B143_check_putting_it_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check an actor putting something on ( this is the convert put to drop where possible rule ): ! === equally specific with === ! Rule 2/6 ! Check an actor putting something on ( this is the can't put what's not held rule ): ! === equally specific with === ! Rule 3/6 ! Check an actor putting something on ( this is the can't put something on itself rule ): ! === equally specific with === ! Rule 4/6 ! Check an actor putting something on ( this is the can't put onto what's not a supporter rule ): ! === equally specific with === ! Rule 5/6 ! Check an actor putting something on ( this is the can't put clothes being worn rule ): ! === equally specific with === ! Rule 6/6 ! Check an actor putting something on ( this is the can't put if this exceeds carrying capacity rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor putting something on ( this is the convert put to drop where possible rule ): [ R_126 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_126, 126); ! [2: if the second noun is down or the actor is on the second noun] if ((((second == I60_down))) || (((second == SupporterOf(actor))))) {! [3: convert to the dropping action on the noun] return GVS_Convert(##Drop,noun,0); } } else if (debug_rules > 1) DB_Rule(R_126, 126, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor putting something on ( this is the can't put what's not held rule ): [ R_127 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_127, 127); ! [2: if the actor is carrying the noun] if (((actor == CarrierOf(noun)))) {! [3: continue the action] rfalse; } ! [4: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [5: continue the action] rfalse; } ! [6: carry out the implicitly taking activity with the noun] CarryOutActivity(V25_implicitly_taking, noun); ! [7: if the actor is carrying the noun] if (((actor == CarrierOf(noun)))) {! [8: continue the action] rfalse; } ! [9: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_127, 127, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor putting something on ( this is the can't put something on itself rule ): [ R_128 tmp_0 ! Let/loop value, e.g., 'noun-CPC': object tmp_1 ! Let/loop value, e.g., 'second-CPC': object tmp_2 ! Let/loop value, e.g., 'transfer ceiling': object ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_128, 128); ! [2: let the noun-cpc be the component parts core of the noun] tmp_0 = CoreOf(noun); ! [3: let the second-cpc be the component parts core of the second noun] tmp_1 = CoreOf(second); ! [4: let the transfer ceiling be the common ancestor of the noun-cpc with the second-cpc] tmp_2 = (CommonAncestor(tmp_0, tmp_1)); ! [5: if the transfer ceiling is the noun-cpc] if (((tmp_2 == tmp_0))) {! [6: if the actor is the player] if (((actor == player))) {! [7: say ~[We] [can't put] something on top of itself.~ ( a )] say__p=1;! [8: ~[We] [can't put] something on top of itself.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_184); new_line; .L_Say147; .L_SayX147;} ! [9: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_128, 128, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor putting something on ( this is the can't put onto what's not a supporter rule ): [ R_129 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_129, 129); ! [2: if the second noun is not a supporter] if (((~~((second ofclass K6_supporter))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~Putting things on [the second noun] [would achieve] nothing.~ ( a )] say__p=1;! [5: ~Putting things on [the second noun] [would achieve] nothing.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_185); new_line; .L_Say148; .L_SayX148;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_129, 129, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor putting something on ( this is the can't put clothes being worn rule ): [ R_130 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_130, 130); ! [2: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~(first taking [regarding the noun][them] off)[command clarification break]~ ( a )] say__p=1;! [5: ~(first taking [regarding the noun][them] off)[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_186); .L_Say149; .L_SayX149;} ! [6: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Disrobe, noun, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [7: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [8: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_130, 130, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor putting something on ( this is the can't put if this exceeds carrying capacity rule ): [ R_131 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_131, 131); ! [2: if the second noun provides the property carrying capacity] if (((WhetherProvides(second, false, capacity)))) {! [3: if the number of things on the second noun is at least the carrying capacity of the second noun] if ((((Prop_20()) >= GProperty(OBJECT_TY, second,capacity)))) {! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[There] [are] no more room on [the second noun].~ ( a )] say__p=1;! [6: ~[There] [are] no more room on [the second noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_187); new_line; .L_Say150; .L_SayX150;} ! [7: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_131, 131, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Putting it on (B144_carry_out_putting_it_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor putting something on ( this is the standard putting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor putting something on ( this is the standard putting rule ): [ R_132 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_132, 132); ! [2: now the noun is on the second noun] MoveObject(noun,second); } else if (debug_rules > 1) DB_Rule(R_132, 132, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Putting it on (B145_report_putting_it_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor putting something on ( this is the concise report putting rule ): ! === equally specific with === ! Rule 2/2 ! Report an actor putting something on ( this is the standard report putting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor putting something on ( this is the concise report putting rule ): [ R_133 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_133, 133); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: if the actor is the player and the i6 parser is running multiple actions] if ((((actor == player))) && (((multiflag==1)))) {! [4: say ~Done.~ ( a )] say__p=1;! [5: ~Done.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_188); new_line; .L_Say151; .L_SayX151;! [6: stop the action] rtrue; } } ! [7: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_133, 133, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor putting something on ( this is the standard report putting rule ): [ R_134 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_134, 134); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: say ~[The actor] [put] [the noun] on [the second noun].~ ( a )] say__p=1;! [4: ~[The actor] [put] [the noun] on [the second noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_189); new_line; .L_Say152; .L_SayX152;} } else if (debug_rules > 1) DB_Rule(R_134, 134, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Inserting it into (B146_check_inserting_it_into) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! Check an actor inserting something into ( this is the convert insert to drop where possible rule ): ! === equally specific with === ! Rule 2/7 ! Check an actor inserting something into ( this is the can't insert what's not held rule ): ! === equally specific with === ! Rule 3/7 ! Check an actor inserting something into ( this is the can't insert something into itself rule ): ! === equally specific with === ! Rule 4/7 ! Check an actor inserting something into ( this is the can't insert into closed containers rule ): ! === equally specific with === ! Rule 5/7 ! Check an actor inserting something into ( this is the can't insert into what's not a container rule ): ! === equally specific with === ! Rule 6/7 ! Check an actor inserting something into ( this is the can't insert clothes being worn rule ): ! === equally specific with === ! Rule 7/7 ! Check an actor inserting something into ( this is the can't insert if this exceeds carrying capacity rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor inserting something into ( this is the convert insert to drop where possible rule ): [ R_135 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_135, 135); ! [2: if the second noun is down or the actor is in the second noun] if ((((second == I60_down))) || (((second == ContainerOf(actor))))) {! [3: convert to the dropping action on the noun] return GVS_Convert(##Drop,noun,0); } } else if (debug_rules > 1) DB_Rule(R_135, 135, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor inserting something into ( this is the can't insert what's not held rule ): [ R_136 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_136, 136); ! [2: if the actor is carrying the noun] if (((actor == CarrierOf(noun)))) {! [3: continue the action] rfalse; } ! [4: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [5: continue the action] rfalse; } ! [6: carry out the implicitly taking activity with the noun] CarryOutActivity(V25_implicitly_taking, noun); ! [7: if the actor is carrying the noun] if (((actor == CarrierOf(noun)))) {! [8: continue the action] rfalse; } ! [9: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_136, 136, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor inserting something into ( this is the can't insert something into itself rule ): [ R_137 tmp_0 ! Let/loop value, e.g., 'noun-CPC': object tmp_1 ! Let/loop value, e.g., 'second-CPC': object tmp_2 ! Let/loop value, e.g., 'transfer ceiling': object ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_137, 137); ! [2: let the noun-cpc be the component parts core of the noun] tmp_0 = CoreOf(noun); ! [3: let the second-cpc be the component parts core of the second noun] tmp_1 = CoreOf(second); ! [4: let the transfer ceiling be the common ancestor of the noun-cpc with the second-cpc] tmp_2 = (CommonAncestor(tmp_0, tmp_1)); ! [5: if the transfer ceiling is the noun-cpc] if (((tmp_2 == tmp_0))) {! [6: if the actor is the player] if (((actor == player))) {! [7: say ~[We] [can't put] something inside itself.~ ( a )] say__p=1;! [8: ~[We] [can't put] something inside itself.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_190); new_line; .L_Say153; .L_SayX153;} ! [9: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_137, 137, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor inserting something into ( this is the can't insert into closed containers rule ): [ R_138 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_138, 138); ! [2: if the second noun is a closed container] if (((second ofclass K5_container) && ((Adj_75_t1_v10(second))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The second noun] [are] closed.~ ( a )] say__p=1;! [5: ~[The second noun] [are] closed.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_191); new_line; .L_Say154; .L_SayX154;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_138, 138, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor inserting something into ( this is the can't insert into what's not a container rule ): [ R_139 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_139, 139); ! [2: if the second noun is not a container] if (((~~((second ofclass K5_container))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the second noun][Those] [can't contain] things.~ ( a )] say__p=1;! [5: ~[regarding the second noun][Those] [can't contain] things.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_192); new_line; .L_Say155; .L_SayX155;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_139, 139, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor inserting something into ( this is the can't insert clothes being worn rule ): [ R_140 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_140, 140); ! [2: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~(first taking [regarding the noun][them] off)[command clarification break]~ ( a )] say__p=1;! [5: ~(first taking [regarding the noun][them] off)[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_193); .L_Say156; .L_SayX156;} ! [6: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Disrobe, noun, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [7: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [8: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_140, 140, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor inserting something into ( this is the can't insert if this exceeds carrying capacity rule ): [ R_141 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_141, 141); ! [2: if the second noun provides the property carrying capacity] if (((WhetherProvides(second, false, capacity)))) {! [3: if the number of things in the second noun is at least the carrying capacity of the second noun] if ((((Prop_21()) >= GProperty(OBJECT_TY, second,capacity)))) {! [4: if the actor is the player] if (((actor == player))) {! [5: now the prior named object is nothing] prior_named_noun = nothing; ! [6: say ~[There] [are] no more room in [the second noun].~ ( a )] say__p=1;! [7: ~[There] [are] no more room in [the second noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_194); new_line; .L_Say157; .L_SayX157;} ! [8: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_141, 141, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Inserting it into (B147_carry_out_inserting_it_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor inserting something into ( this is the standard inserting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor inserting something into ( this is the standard inserting rule ): [ R_142 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_142, 142); ! [2: now the noun is in the second noun] MoveObject(noun,second); } else if (debug_rules > 1) DB_Rule(R_142, 142, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Inserting it into (B148_report_inserting_it_int) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor inserting something into ( this is the concise report inserting rule ): ! === equally specific with === ! Rule 2/2 ! Report an actor inserting something into ( this is the standard report inserting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor inserting something into ( this is the concise report inserting rule ): [ R_143 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_143, 143); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: if the actor is the player and the i6 parser is running multiple actions] if ((((actor == player))) && (((multiflag==1)))) {! [4: say ~Done.~ ( a )] say__p=1;! [5: ~Done.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_195); new_line; .L_Say158; .L_SayX158;! [6: stop the action] rtrue; } } ! [7: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_143, 143, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor inserting something into ( this is the standard report inserting rule ): [ R_144 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_144, 144); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: say ~[The actor] [put] [the noun] into [the second noun].~ ( a )] say__p=1;! [4: ~[The actor] [put] [the noun] into [the second noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_196); new_line; .L_Say159; .L_SayX159;} } else if (debug_rules > 1) DB_Rule(R_144, 144, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Eating (B149_check_eating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check an actor eating ( this is the can't eat unless edible rule ): ! === equally specific with === ! Rule 2/4 ! Check an actor eating ( this is the can't eat clothing without removing it first rule ): ! === equally specific with === ! Rule 3/4 ! Check an actor eating ( this is the can't eat other people's food rule ): ! === equally specific with === ! Rule 4/4 ! Check an actor eating ( this is the can't eat portable food without carrying it rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor eating ( this is the can't eat unless edible rule ): [ R_145 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_145, 145); ! [2: if the noun is not a thing or the noun is not edible] if ((((~~((noun ofclass K2_thing))))) || (((~~(((Adj_57_t1_v10(noun)))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] plainly inedible.~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] plainly inedible.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_197); new_line; .L_Say160; .L_SayX160;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_145, 145, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor eating ( this is the can't eat clothing without removing it first rule ): [ R_146 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_146, 146); ! [2: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~(first taking [the noun] off)[command clarification break]~ ( a )] say__p=1;! [5: ~(first taking [the noun] off)[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_198); .L_Say161; .L_SayX161;} ! [6: try the actor trying taking off the noun] TryAction(0, actor, ##Disrobe, noun, 0); ! [7: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [8: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_146, 146, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor eating ( this is the can't eat other people's food rule ): [ R_147 tmp_0 ! Let/loop value, e.g., 'owner': person ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_147, 147); ! [2: if the noun is enclosed by a person ( called the owner ) who is not the actor] if ((((Prop_22() && (tmp_0=deferred_calling_list-->0, true)) || (tmp_0 = 0,false)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The owner] [might not appreciate] that.~ ( a )] say__p=1;! [5: ~[The owner] [might not appreciate] that.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_199); new_line; .L_Say162; .L_SayX162;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_147, 147, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor eating ( this is the can't eat portable food without carrying it rule ): [ R_148 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_148, 148); ! [2: if the noun is portable and the actor is not carrying the noun] if (((((Adj_60_t1_v10(noun))))) && (((~~((actor == CarrierOf(noun))))))) {! [3: carry out the implicitly taking activity with the noun] CarryOutActivity(V25_implicitly_taking, noun); ! [4: if the actor is not carrying the noun] if (((~~((actor == CarrierOf(noun)))))) {! [5: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_148, 148, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Eating (B150_carry_out_eating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor eating ( this is the standard eating rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor eating ( this is the standard eating rule ): [ R_149 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_149, 149); ! [2: now the noun is nowhere] RemoveFromPlay(noun);; } else if (debug_rules > 1) DB_Rule(R_149, 149, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Eating (B151_report_eating) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor eating ( this is the standard report eating rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor eating ( this is the standard report eating rule ): [ R_150 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_150, 150); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [eat] [the noun]. Not bad.~ ( a )] say__p=1;! [5: ~[We] [eat] [the noun]. Not bad.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_200); new_line; .L_Say163; .L_SayX163;} else { ! [6: say ~[The actor] [eat] [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [eat] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_201); new_line; .L_Say164; .L_SayX164;} } } else if (debug_rules > 1) DB_Rule(R_150, 150, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Going (B152_check_going) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check an actor going when the actor is on a supporter ( called the chaise ) ( this is the stand up before going rule ): ! >>> I - Number of aspects constrained >>> ! Rule 2/6 ! Check an actor going ( this is the can't travel in what's not a vehicle rule ): ! === equally specific with === ! Rule 3/6 ! Check an actor going ( this is the can't go through undescribed doors rule ): ! === equally specific with === ! Rule 4/6 ! Check an actor going ( this is the can't go through closed doors rule ): ! === equally specific with === ! Rule 5/6 ! Check an actor going ( this is the determine map connection rule ): ! === equally specific with === ! Rule 6/6 ! Check an actor going ( this is the can't go that way rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor going when the actor is on a supporter ( called the chaise ) ( this is the stand up before going rule ): [ R_152 tmp_0 ! Let/loop value, e.g., 'chaise': supporter ; if ((((act_requester==nothing) && (self=actor,true) && (((SupporterOf(actor) ofclass K6_supporter) && (tmp_0=(SupporterOf(actor)), true)))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_152, 152); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~(first getting off [the chaise])[command clarification break]~ ( a )] say__p=1;! [4: ~(first getting off [the chaise])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_202); .L_Say165; .L_SayX165;} ! [5: silently try the actor exiting] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Exit, 0, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; } else if (debug_rules > 1) DB_Rule(R_152, 152, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor going ( this is the can't travel in what's not a vehicle rule ): [ R_153 tmp_0 ! Let/loop value, e.g., 'nonvehicle': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_153, 153); ! [2: let nonvehicle be the holder of the actor] tmp_0 = (HolderOf(actor)); ! [3: if nonvehicle is the room gone from] if (((tmp_0 == (MStack-->MstVO(20007,0))))) {! [4: continue the action] rfalse; } ! [5: if nonvehicle is the vehicle gone by] if (((tmp_0 == (MStack-->MstVO(20007,3))))) {! [6: continue the action] rfalse; } ! [7: if the actor is the player] if (((actor == player))) {! [8: if nonvehicle is a supporter] if (((tmp_0 ofclass K6_supporter))) {! [9: say ~[We] [would have] to get off [the nonvehicle] first.~ ( a )] say__p=1;! [10: ~[We] [would have] to get off [the nonvehicle] first.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_203); new_line; .L_Say166; .L_SayX166;} else { ! [11: say ~[We] [would have] to get out of [the nonvehicle] first.~ ( b )] say__p=1;! [12: ~[We] [would have] to get out of [the nonvehicle] first.~ ( b )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_204); new_line; .L_Say167; .L_SayX167;} } ! [13: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_153, 153, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor going ( this is the can't go through undescribed doors rule ): [ R_154 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_154, 154); ! [2: if the door gone through is not nothing and the door gone through is undescribed] if ((((~~(((MStack-->MstVO(20007,2)) == nothing))))) && ((((Adj_66_t1_v10((MStack-->MstVO(20007,2)))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [can't go] that way.~ ( a )] say__p=1;! [5: ~[We] [can't go] that way.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_205); new_line; .L_Say168; .L_SayX168;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_154, 154, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor going ( this is the can't go through closed doors rule ): [ R_155 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_155, 155); ! [2: if the door gone through is not nothing and the door gone through is closed] if ((((~~(((MStack-->MstVO(20007,2)) == nothing))))) && ((((Adj_75_t1_v10((MStack-->MstVO(20007,2)))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~(first opening [the door gone through])[command clarification break]~ ( a )] say__p=1;! [5: ~(first opening [the door gone through])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_206); .L_Say169; .L_SayX169;} ! [6: silently try the actor opening the door gone through] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Open, (MStack-->MstVO(20007,2)), 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [7: if the door gone through is open] if ((((Adj_74_t1_v10((MStack-->MstVO(20007,2))))))) {! [8: continue the action] rfalse; } ! [9: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_155, 155, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor going ( this is the determine map connection rule ): [ R_156 I7RBLK; @push I7SFRAME; StackFrameCreate(0); @push formal_par0; @push formal_par1; I7RBLK = KERNEL_3(); @pull formal_par1; @pull formal_par0; @pull I7SFRAME; return I7RBLK; ! nothing ]; [ KERNEL_3 tmp_0 ! Let/loop value, e.g., 'target': object tmp_1 ! Let/loop value (deallocated by end of phrase) ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_156, 156); ! [2: let the target be nothing] tmp_0 = nothing; ! [3: if the noun is a direction] if (((noun ofclass K3_direction))) {! [4: let direction d be the noun] tmp_1 = noun; ! [5: let the target be the room-or-door direction d from the room gone from] tmp_0 = ! Resolution of run-time phrase ambiguity (deciding a value): ( ! This value evaluates third (i.e., last) formal_rv + 0*( ! The following condition evaluates second (( ((((((formal_par0 ofclass K3_direction) && (formal_par0 ofclass K3_direction))))) && (( formal_rv = RoomOrDoorFrom(formal_par1,formal_par0)) | 1) )|| (ArgumentTypeFailed(2330, 1)) )) + ! The following assignments evaluate first ((formal_par1 = (MStack-->MstVO(20007,0))) + (formal_par0 = tmp_1) )) ) ! Resolution complete ; } else { ! [6: if the noun is a door] if (((noun ofclass K4_door))) {! [7: let the target be the noun] tmp_0 = noun; } } ! [8: if the target is a door] if (((tmp_0 ofclass K4_door))) {! [9: now the target is the other side of the target from the room gone from] tmp_0 = ! Resolution of run-time phrase ambiguity (deciding a value): ( ! This value evaluates third (i.e., last) formal_rv + 0*( ! The following condition evaluates second (( ((((((formal_par0 ofclass K4_door) && (formal_par0 ofclass K4_door))))) && (( formal_rv = OtherSideOfDoor(formal_par0,formal_par1)) | 1) )|| (ArgumentTypeFailed(2334, 1)) )) + ! The following assignments evaluate first ((formal_par1 = (MStack-->MstVO(20007,0))) + (formal_par0 = tmp_0) )) ) ! Resolution complete ; } ! [10: now the room gone to is the target] (MStack-->MstVO(20007,1)) = tmp_0; } else if (debug_rules > 1) DB_Rule(R_156, 156, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor going ( this is the can't go that way rule ): [ R_157 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_157, 157); ! [2: if the room gone to is nothing] if ((((MStack-->MstVO(20007,1)) == nothing))) {! [3: if the door gone through is nothing] if ((((MStack-->MstVO(20007,2)) == nothing))) {! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[We] [can't go] that way.~ ( a )] say__p=1;! [6: ~[We] [can't go] that way.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_207); new_line; .L_Say170; .L_SayX170;} ! [7: stop the action] rtrue; } ! [8: if the actor is the player] if (((actor == player))) {! [9: say ~[We] [can't], since [the door gone through] [lead] nowhere.~ ( b )] say__p=1;! [10: ~[We] [can't], since [the door gone through] [lead] nowhere.~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_208); new_line; .L_Say171; .L_SayX171;} ! [11: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_157, 157, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Going (B153_carry_out_going) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Carry out going north: ! >>> I - Number of aspects constrained >>> ! Rule 2/4 ! Carry out an actor going ( this is the move player and vehicle rule ): ! === equally specific with === ! Rule 3/4 ! Carry out an actor going ( this is the move floating objects rule ): ! === equally specific with === ! Rule 4/4 ! Carry out an actor going ( this is the check light in new location rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Carry out going north: [ R_862 ; if ((( (actor==player) && ((noun == I51_north) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_862, 862); ! [2: now the beige door is closed] (Adj_75_t2_v10(I130_beige_door)); ! [3: now the beige door is locked] (Adj_79_t2_v10(I130_beige_door)); ! [4: now solved is 1] (Global_Vars-->12) = 1; ! [5: now sos is 0] (Global_Vars-->16) = 0; ! [6: now screwed is 0] (Global_Vars-->20) = 0; ! [7: increase rooms cleared by 1] (Global_Vars-->22) = (Global_Vars-->22) + 1;; ! [8: now the velvet compartment is open] (Adj_74_t2_v10(I144_velvet_compartment)); ! [9: now the strange machine is nowhere] RemoveFromPlay(I142_strange_machine);; ! [10: now the keypad is nowhere] RemoveFromPlay(I147_electronic_keypad);; ! [11: now a pair of lights is nowhere] RemoveFromPlay(I149_pair_of_lights);; ! [12: now the block of ice is nowhere] RemoveFromPlay(I153_block_of_ice);; ! [13: now the printed name of the block of ice is ~block of ice~] BlkValueCopy(GProperty(10, I153_block_of_ice,short_name), TX_L_76); ! [14: now an orange berry is nowhere] RemoveFromPlay(I157_orange_berry);; ! [15: now a printed slip is nowhere] RemoveFromPlay(I148_printed_slip);; ! [16: now a thin key is nowhere] RemoveFromPlay(I131_thin_key);; ! [17: now the wide key is nowhere] RemoveFromPlay(I146_wide_key);; ! [18: now the desk is nowhere] RemoveFromPlay(I158_desk);; ! [19: now the drawer is closed] (Adj_75_t2_v10(I159_drawer)); ! [20: now the table is nowhere] RemoveFromPlay(I160_table);; ! [21: now the slide puzzle box is closed] (Adj_75_t2_v10(I161_slide_puzzle_box)); ! [22: now the slide puzzle box is nowhere] RemoveFromPlay(I161_slide_puzzle_box);; ! [23: now the lockbox is closed] (Adj_75_t2_v10(I163_lockbox)); ! [24: now the lockbox is locked] (Adj_79_t2_v10(I163_lockbox)); ! [25: now the lockbox is nowhere] RemoveFromPlay(I163_lockbox);; ! [26: now the wooden box is closed] (Adj_75_t2_v10(I164_wooden_box)); ! [27: now the wooden box is nowhere] RemoveFromPlay(I164_wooden_box);; ! [28: if a random chance of 3 in 4 succeeds] if (((GenerateRandomNumber(1, 4) <= 3))) {! [29: now clues is a random number from 1 to 10] (Global_Vars-->13) = R_DecimalNumber(1, 10); ! [30: if clues is 1] if ((((Global_Vars-->13) == 1))) {! [31: if the note is not handled] if (((~~(((Adj_64_t1_v10(I132_note))))))) {! [32: now the note is in the mysterious room] MoveObject(I132_note,I128_mysterious_room); } } ! [33: if clues is 2] if ((((Global_Vars-->13) == 2))) {! [34: if the paper is not handled] if (((~~(((Adj_64_t1_v10(I133_paper))))))) {! [35: now the paper is in the mysterious room] MoveObject(I133_paper,I128_mysterious_room); } } ! [36: if clues is 3] if ((((Global_Vars-->13) == 3))) {! [37: if the journal is not handled] if (((~~(((Adj_64_t1_v10(I134_journal))))))) {! [38: now the journal is in the mysterious room] MoveObject(I134_journal,I128_mysterious_room); } } ! [39: if clues is 4] if ((((Global_Vars-->13) == 4))) {! [40: if the diagram is not handled] if (((~~(((Adj_64_t1_v10(I135_diagram))))))) {! [41: now the diagram is in the mysterious room] MoveObject(I135_diagram,I128_mysterious_room); } } ! [42: if clues is 5] if ((((Global_Vars-->13) == 5))) {! [43: if the book is not handled] if (((~~(((Adj_64_t1_v10(I136_book))))))) {! [44: now the book is in the mysterious room] MoveObject(I136_book,I128_mysterious_room); } } ! [45: if clues is 6] if ((((Global_Vars-->13) == 6))) {! [46: if the torn report is not handled] if (((~~(((Adj_64_t1_v10(I137_torn_report))))))) {! [47: now the torn report is in the mysterious room] MoveObject(I137_torn_report,I128_mysterious_room); } } ! [48: if clues is 7] if ((((Global_Vars-->13) == 7))) {! [49: if the letter is not handled] if (((~~(((Adj_64_t1_v10(I138_letter))))))) {! [50: now the letter is in the mysterious room] MoveObject(I138_letter,I128_mysterious_room); } } ! [51: if clues is 8] if ((((Global_Vars-->13) == 8))) {! [52: if the scroll is not handled] if (((~~(((Adj_64_t1_v10(I139_scroll))))))) {! [53: now the scroll is in the mysterious room] MoveObject(I139_scroll,I128_mysterious_room); } } ! [54: if clues is 9] if ((((Global_Vars-->13) == 9))) {! [55: if the memo is not handled] if (((~~(((Adj_64_t1_v10(I140_memo))))))) {! [56: now the memo is in the mysterious room] MoveObject(I140_memo,I128_mysterious_room); } } ! [57: if clues is 10] if ((((Global_Vars-->13) == 10))) {! [58: if the note is handled or the paper is handled or the journal is handled or the diagram is handled or the book is handled or the torn report is handled or the letter is handled or the scroll is handled or the memo is handled] if (((((Adj_64_t1_v10(I132_note))))) || (((((Adj_64_t1_v10(I133_paper))))) || (((((Adj_64_t1_v10(I134_journal))))) || (((((Adj_64_t1_v10(I135_diagram))))) || (((((Adj_64_t1_v10(I136_book))))) || (((((Adj_64_t1_v10(I137_torn_report))))) || (((((Adj_64_t1_v10(I138_letter))))) || (((((Adj_64_t1_v10(I139_scroll))))) || ((((Adj_64_t1_v10(I140_memo))))))))))))) {! [59: if the footnote is not handled] if (((~~(((Adj_64_t1_v10(I141_footnote))))))) {! [60: now the footnote is in the mysterious room] MoveObject(I141_footnote,I128_mysterious_room); } } } } ! [61: now activatee is a random number from 1 to 4] (Global_Vars-->17) = R_DecimalNumber(1, 4); ! [62: now furniture is a random number from 1 to 2] (Global_Vars-->18) = R_DecimalNumber(1, 2); ! [63: if activatee is 1] if ((((Global_Vars-->17) == 1))) {! [64: now the strange machine is in the mysterious room] MoveObject(I142_strange_machine,I128_mysterious_room); } ! [65: if activatee is 2] if ((((Global_Vars-->17) == 2))) {! [66: now the electronic keypad is in the mysterious room] MoveObject(I147_electronic_keypad,I128_mysterious_room); ! [67: now code is a random number from 1000 to 9999] (Global_Vars-->19) = R_DecimalNumber(1000, 9999); } ! [68: if activatee is 3] if ((((Global_Vars-->17) == 3))) {! [69: now a pair of lights is in the mysterious room] MoveObject(I149_pair_of_lights,I128_mysterious_room); ! [70: now sos is 0] (Global_Vars-->16) = 0; } ! [71: if activatee is 4] if ((((Global_Vars-->17) == 4))) {! [72: now the block of ice is in the mysterious room] MoveObject(I153_block_of_ice,I128_mysterious_room); } ! [73: if furniture is 1] if ((((Global_Vars-->18) == 1))) {! [74: now the desk is in the mysterious room] MoveObject(I158_desk,I128_mysterious_room); } ! [75: if furniture is 2] if ((((Global_Vars-->18) == 2))) {! [76: now the table is in the mysterious room] MoveObject(I160_table,I128_mysterious_room); } ! [77: if the strange machine is in the mysterious room or the electronic keypad is in the mysterious room] if ((((I128_mysterious_room == ContainerOf(I142_strange_machine)))) || (((I128_mysterious_room == ContainerOf(I147_electronic_keypad))))) {! [78: if the desk is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I158_desk)))) {! [79: if a random chance of 1 in 2 succeeds] if (((GenerateRandomNumber(1, 2) <= 1))) {! [80: now the slide puzzle box is on the desk] MoveObject(I161_slide_puzzle_box,I158_desk); ! [81: now the hammer is in the drawer] MoveObject(I162_hammer,I159_drawer); } else { ! [82: now the wooden box is on the desk] MoveObject(I164_wooden_box,I158_desk); ! [83: now the screwdriver is in the drawer] MoveObject(I165_screwdriver,I159_drawer); } } ! [84: if the table is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I160_table)))) {! [85: if a random chance of 1 in 2 succeeds] if (((GenerateRandomNumber(1, 2) <= 1))) {! [86: now the slide puzzle box is on the table] MoveObject(I161_slide_puzzle_box,I160_table); ! [87: now the hammer is on the table] MoveObject(I162_hammer,I160_table); } else { ! [88: now the wooden box is on the table] MoveObject(I164_wooden_box,I160_table); ! [89: now the screwdriver is on the table] MoveObject(I165_screwdriver,I160_table); } } } ! [90: if a pair of lights is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I149_pair_of_lights)))) {! [91: now cont is a random number from 1 to 3] (Global_Vars-->21) = R_DecimalNumber(1, 3); ! [92: if the desk is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I158_desk)))) {! [93: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [94: now the slide puzzle box is on the desk] MoveObject(I161_slide_puzzle_box,I158_desk); } ! [95: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [96: now the lockbox is on the desk] MoveObject(I163_lockbox,I158_desk); } ! [97: if cont is 3] if ((((Global_Vars-->21) == 3))) {! [98: now the wooden box is on the desk] MoveObject(I164_wooden_box,I158_desk); } } ! [99: if the table is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I160_table)))) {! [100: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [101: now the slide puzzle box is on the table] MoveObject(I161_slide_puzzle_box,I160_table); } ! [102: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [103: now the lockbox is on the table] MoveObject(I163_lockbox,I160_table); } ! [104: if cont is 3] if ((((Global_Vars-->21) == 3))) {! [105: now the wooden box is on the table] MoveObject(I164_wooden_box,I160_table); } } } ! [106: if the block of ice is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I153_block_of_ice)))) {! [107: now cont is a random number from 1 to 3] (Global_Vars-->21) = R_DecimalNumber(1, 3); ! [108: if the desk is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I158_desk)))) {! [109: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [110: now the slide puzzle box is on the desk] MoveObject(I161_slide_puzzle_box,I158_desk); ! [111: now the hammer is in the drawer] MoveObject(I162_hammer,I159_drawer); } ! [112: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [113: now the lockbox is on the desk] MoveObject(I163_lockbox,I158_desk); ! [114: now orange berry is in the drawer] MoveObject(I157_orange_berry,I159_drawer); } ! [115: if cont is 3] if ((((Global_Vars-->21) == 3))) {! [116: now the wooden box is on the desk] MoveObject(I164_wooden_box,I158_desk); ! [117: now the screwdriver is in the drawer] MoveObject(I165_screwdriver,I159_drawer); } } ! [118: if the table is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I160_table)))) {! [119: if cont is 1] if ((((Global_Vars-->21) == 1))) {! [120: now the slide puzzle box is on the table] MoveObject(I161_slide_puzzle_box,I160_table); ! [121: now the hammer is on the table] MoveObject(I162_hammer,I160_table); } ! [122: if cont is 2] if ((((Global_Vars-->21) == 2))) {! [123: now the lockbox is on the table] MoveObject(I163_lockbox,I160_table); ! [124: now orange berry is on the table] MoveObject(I157_orange_berry,I160_table); } ! [125: if cont is 3] if ((((Global_Vars-->21) == 3))) {! [126: now the wooden box is on the table] MoveObject(I164_wooden_box,I160_table); ! [127: now the screwdriver is on the table] MoveObject(I165_screwdriver,I160_table); } } } } else if (debug_rules > 1) DB_Rule(R_862, 862, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out an actor going ( this is the move player and vehicle rule ): [ R_158 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_158, 158); ! [2: if the vehicle gone by is nothing] if ((((MStack-->MstVO(20007,3)) == nothing))) {! [3: surreptitiously move the actor to the room gone to during going] MoveDuringGoing(actor, (MStack-->MstVO(20007,1))); } else { ! [4: surreptitiously move the vehicle gone by to the room gone to during going] MoveDuringGoing((MStack-->MstVO(20007,3)), (MStack-->MstVO(20007,1))); } ! [5: if the location is not the location of the player] if (((~~((real_location == LocationOf(player)))))) {! [6: now the location is the location of the player] real_location = LocationOf(player); } } else if (debug_rules > 1) DB_Rule(R_158, 158, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out an actor going ( this is the move floating objects rule ): [ R_159 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_159, 159); ! [2: if the actor is the player or the player is within the vehicle gone by or the player is within the thing gone with] if ((((actor == player))) || (((((MStack-->MstVO(20007,3)) == ContainerOf(player)))) || ((((MStack-->MstVO(20007,4)) == ContainerOf(player)))))) {! [3: update backdrop positions] MoveFloatingObjects(); } } else if (debug_rules > 1) DB_Rule(R_159, 159, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out an actor going ( this is the check light in new location rule ): [ R_160 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_160, 160); ! [2: if the actor is the player or the player is within the vehicle gone by or the player is within the thing gone with] if ((((actor == player))) || (((((MStack-->MstVO(20007,3)) == ContainerOf(player)))) || ((((MStack-->MstVO(20007,4)) == ContainerOf(player)))))) {! [3: surreptitiously reckon darkness] SilentlyConsiderLight(); } } else if (debug_rules > 1) DB_Rule(R_160, 160, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Going (B154_report_going) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor going ( this is the describe room gone into rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor going ( this is the describe room gone into rule ): [ R_161 I7RBLK; @push I7SFRAME; StackFrameCreate(0); @push formal_par0; @push formal_par1; I7RBLK = KERNEL_4(); @pull formal_par1; @pull formal_par0; @pull I7SFRAME; return I7RBLK; ! nothing ]; [ KERNEL_4 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_161, 161); ! [2: if the player is the actor] if (((player == actor))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: produce a room description with going spacing conventions] LookAfterGoing(); } } else { ! [5: if the noun is a direction] if (((noun ofclass K3_direction))) {! [6: if the location is the room gone from or the player is within the vehicle gone by or the player is within the thing gone with] if ((((real_location == (MStack-->MstVO(20007,0))))) || (((((MStack-->MstVO(20007,3)) == ContainerOf(player)))) || ((((MStack-->MstVO(20007,4)) == ContainerOf(player)))))) {! [7: if the room gone from is the room gone to] if ((((MStack-->MstVO(20007,0)) == (MStack-->MstVO(20007,1))))) {! [8: continue the action] rfalse; } else { ! [9: if the noun is up] if (((noun == I59_up))) {! [10: say ~[The actor] [go] up~ ( a )] say__p=1;! [11: ~[The actor] [go] up~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_209); .L_Say172; .L_SayX172;} else { ! [12: if the noun is down] if (((noun == I60_down))) {! [13: say ~[The actor] [go] down~ ( b )] say__p=1;! [14: ~[The actor] [go] down~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_210); .L_Say173; .L_SayX173;} else { ! [15: say ~[The actor] [go] [noun]~ ( c )] say__p=1;! [16: ~[The actor] [go] [noun]~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_211); .L_Say174; .L_SayX174;} } } } else { ! [17: let the back way be the opposite of the noun] tmp_0 = GProperty(OBJECT_TY, noun,p10_opposite); ! [18: if the location is the room gone to] if (((real_location == (MStack-->MstVO(20007,1))))) {! [19: let the room back the other way be the room back way from the location] tmp_1 = ! Resolution of run-time phrase ambiguity (deciding a value): ( ! This value evaluates third (i.e., last) formal_rv + 0*( ! The following condition evaluates second (( ((((((formal_par1 ofclass K1_room) && (formal_par1 ofclass K1_room))))) && (( formal_rv = MapConnection(formal_par1,formal_par0)) | 1) )|| (ArgumentTypeFailed(2385, 1)) )) + ! The following assignments evaluate first ((formal_par1 = real_location) + (formal_par0 = tmp_0) )) ) ! Resolution complete ; ! [20: let the room normally this way be the room noun from the room gone from] tmp_2 = ! Resolution of run-time phrase ambiguity (deciding a value): ( ! This value evaluates third (i.e., last) formal_rv + 0*( ! The following condition evaluates second (( ((((((formal_par0 ofclass K3_direction) && (formal_par0 ofclass K3_direction))))) && (( formal_rv = MapConnection(formal_par1,formal_par0)) | 1) )|| (ArgumentTypeFailed(2387, 1)) )) + ! The following assignments evaluate first ((formal_par1 = (MStack-->MstVO(20007,0))) + (formal_par0 = noun) )) ) ! Resolution complete ; ! [21: if the room back the other way is the room gone from or the room back the other way is the room normally this way] if ((((tmp_1 == (MStack-->MstVO(20007,0))))) || (((tmp_1 == tmp_2)))) {! [22: if the back way is up] if (((tmp_0 == I59_up))) {! [23: say ~[The actor] [arrive] from above~ ( d )] say__p=1;! [24: ~[The actor] [arrive] from above~ ( d )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_212); .L_Say175; .L_SayX175;} else { ! [25: if the back way is down] if (((tmp_0 == I60_down))) {! [26: say ~[The actor] [arrive] from below~ ( e )] say__p=1;! [27: ~[The actor] [arrive] from below~ ( e )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_213); .L_Say176; .L_SayX176;} else { ! [28: say ~[The actor] [arrive] from [the back way]~ ( f )] say__p=1;! [29: ~[The actor] [arrive] from [the back way]~ ( f )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_214); .L_Say177; .L_SayX177;} } } else { ! [30: say ~[The actor] [arrive]~ ( g )] say__p=1;! [31: ~[The actor] [arrive]~ ( g )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_215); .L_Say178; .L_SayX178;} } else { ! [32: if the back way is up] if (((tmp_0 == I59_up))) {! [33: say ~[The actor] [arrive] at [the room gone to] from above~ ( h )] say__p=1;! [34: ~[The actor] [arrive] at [the room gone to] from above~ ( h )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_216); .L_Say179; .L_SayX179;} else { ! [35: if the back way is down] if (((tmp_0 == I60_down))) {! [36: say ~[The actor] [arrive] at [the room gone to] from below~ ( i )] say__p=1;! [37: ~[The actor] [arrive] at [the room gone to] from below~ ( i )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_217); .L_Say180; .L_SayX180;} else { ! [38: say ~[The actor] [arrive] at [the room gone to] from [the back way]~ ( j )] say__p=1;! [39: ~[The actor] [arrive] at [the room gone to] from [the back way]~ ( j )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_218); .L_Say181; .L_SayX181;} } } } } else { ! [40: if the location is the room gone from] if (((real_location == (MStack-->MstVO(20007,0))))) {! [41: say ~[The actor] [go] through [the noun]~ ( k )] say__p=1;! [42: ~[The actor] [go] through [the noun]~ ( k )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_219); .L_Say182; .L_SayX182;} else { ! [43: say ~[The actor] [arrive] from [the noun]~ ( l )] say__p=1;! [44: ~[The actor] [arrive] from [the noun]~ ( l )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_220); .L_Say183; .L_SayX183;} } ! [45: if the vehicle gone by is not nothing] if (((~~(((MStack-->MstVO(20007,3)) == nothing))))) {! [46: say ~ ~] say__p=1;! [47: ~ ~] ParaContent(); print " "; .L_Say184; .L_SayX184;! [48: if the vehicle gone by is a supporter] if ((((MStack-->MstVO(20007,3)) ofclass K6_supporter))) {! [49: say ~on [the vehicle gone by]~ ( m )] say__p=1;! [50: ~on [the vehicle gone by]~ ( m )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_221); .L_Say185; .L_SayX185;} else { ! [51: say ~in [the vehicle gone by]~ ( n )] say__p=1;! [52: ~in [the vehicle gone by]~ ( n )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_222); .L_Say186; .L_SayX186;} } ! [53: if the thing gone with is not nothing] if (((~~(((MStack-->MstVO(20007,4)) == nothing))))) {! [54: if the player is within the thing gone with] if ((((MStack-->MstVO(20007,4)) == ContainerOf(player)))) {! [55: say ~, pushing [the thing gone with] in front, and [us] along too~ ( o )] say__p=1;! [56: ~, pushing [the thing gone with] in front, and [us] along too~ ( o )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_223); .L_Say187; .L_SayX187;} else { ! [57: if the player is within the vehicle gone by] if ((((MStack-->MstVO(20007,3)) == ContainerOf(player)))) {! [58: say ~, pushing [the thing gone with] in front~ ( p )] say__p=1;! [59: ~, pushing [the thing gone with] in front~ ( p )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_224); .L_Say188; .L_SayX188;} else { ! [60: if the location is the room gone from] if (((real_location == (MStack-->MstVO(20007,0))))) {! [61: say ~, pushing [the thing gone with] away~ ( q )] say__p=1;! [62: ~, pushing [the thing gone with] away~ ( q )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_225); .L_Say189; .L_SayX189;} else { ! [63: say ~, pushing [the thing gone with] in~ ( r )] say__p=1;! [64: ~, pushing [the thing gone with] in~ ( r )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_226); .L_Say190; .L_SayX190;} } } } ! [65: if the player is within the vehicle gone by and the player is not within the thing gone with] if (((((MStack-->MstVO(20007,3)) == ContainerOf(player)))) && (((~~(((MStack-->MstVO(20007,4)) == ContainerOf(player))))))) {! [66: say ~, taking [us] along~ ( s )] say__p=1;! [67: ~, taking [us] along~ ( s )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),(LocalParking-->2=tmp_2),TX_R_227); .L_Say191; .L_SayX191;! [68: say ~.~] say__p=1;! [69: ~.~] ParaContent(); print "."; new_line; .L_Say192; .L_SayX192;! [70: try looking] TryAction(0, player, ##Look, 0, 0); ! [71: continue the action] rfalse; } ! [72: say ~.~] say__p=1;! [73: ~.~] ParaContent(); print "."; new_line; .L_Say193; .L_SayX193;} } else if (debug_rules > 1) DB_Rule(R_161, 161, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Entering (B155_check_entering) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/8 ! Check an actor entering ( this is the convert enter door into go rule ): ! === equally specific with === ! Rule 2/8 ! Check an actor entering ( this is the convert enter compass direction into go rule ): ! === equally specific with === ! Rule 3/8 ! Check an actor entering ( this is the can't enter what's already entered rule ): ! === equally specific with === ! Rule 4/8 ! Check an actor entering ( this is the can't enter what's not enterable rule ): ! === equally specific with === ! Rule 5/8 ! Check an actor entering ( this is the can't enter closed containers rule ): ! === equally specific with === ! Rule 6/8 ! Check an actor entering ( this is the can't enter if this exceeds carrying capacity rule ): ! === equally specific with === ! Rule 7/8 ! Check an actor entering ( this is the can't enter something carried rule ): ! === equally specific with === ! Rule 8/8 ! Check an actor entering ( this is the implicitly pass through other barriers rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the convert enter door into go rule ): [ R_163 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_163, 163); ! [2: if the noun is a door] if (((noun ofclass K4_door))) {! [3: convert to the going action on the noun] return GVS_Convert(##Go,noun,0); } } else if (debug_rules > 1) DB_Rule(R_163, 163, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the convert enter compass direction into go rule ): [ R_164 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_164, 164); ! [2: if the noun is a direction] if (((noun ofclass K3_direction))) {! [3: convert to the going action on the noun] return GVS_Convert(##Go,noun,0); } } else if (debug_rules > 1) DB_Rule(R_164, 164, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the can't enter what's already entered rule ): [ R_165 tmp_0 ! Let/loop value, e.g., 'local ceiling': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_165, 165); ! [2: if the actor is the noun] if (((actor == noun))) {! [3: make no decision] rfalse; } ! [4: let the local ceiling be the common ancestor of the actor with the noun] tmp_0 = (CommonAncestor(actor, noun)); ! [5: if the local ceiling is the noun] if (((tmp_0 == noun))) {! [6: if the player is the actor] if (((player == actor))) {! [7: if the noun is a supporter] if (((noun ofclass K6_supporter))) {! [8: say ~But [we]['re] already on [the noun].~ ( a )] say__p=1;! [9: ~But [we]['re] already on [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_228); new_line; .L_Say194; .L_SayX194;} else { ! [10: say ~But [we]['re] already in [the noun].~ ( b )] say__p=1;! [11: ~But [we]['re] already in [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_229); new_line; .L_Say195; .L_SayX195;} } ! [12: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_165, 165, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the can't enter what's not enterable rule ): [ R_166 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_166, 166); ! [2: if the noun is not enterable] if (((~~(((Adj_71_t1_v10(noun))))))) {! [3: if the player is the actor] if (((player == actor))) {! [4: if the player's command includes ~stand~] if (((matched_text=SnippetIncludes(Consult_Grammar_125,players_command)))) {! [5: say ~[regarding the noun][They're] not something [we] [can] stand on.~ ( a )] say__p=1;! [6: ~[regarding the noun][They're] not something [we] [can] stand on.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_230); new_line; .L_Say196; .L_SayX196;} else { ! [7: if the player's command includes ~sit~] if (((matched_text=SnippetIncludes(Consult_Grammar_126,players_command)))) {! [8: say ~[regarding the noun][They're] not something [we] [can] sit down on.~ ( b )] say__p=1;! [9: ~[regarding the noun][They're] not something [we] [can] sit down on.~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_231); new_line; .L_Say197; .L_SayX197;} else { ! [10: if the player's command includes ~lie~] if (((matched_text=SnippetIncludes(Consult_Grammar_127,players_command)))) {! [11: say ~[regarding the noun][They're] not something [we] [can] lie down on.~ ( c )] say__p=1;! [12: ~[regarding the noun][They're] not something [we] [can] lie down on.~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_232); new_line; .L_Say198; .L_SayX198;} else { ! [13: say ~[regarding the noun][They're] not something [we] [can] enter.~ ( d )] say__p=1;! [14: ~[regarding the noun][They're] not something [we] [can] enter.~ ( d )] ParaContent(); print (TEXT_TY_Say) (TX_R_233); new_line; .L_Say199; .L_SayX199;} } } } ! [15: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_166, 166, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the can't enter closed containers rule ): [ R_167 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_167, 167); ! [2: if the noun is a closed container] if (((noun ofclass K5_container) && ((Adj_75_t1_v10(noun))))) {! [3: if the player is the actor] if (((player == actor))) {! [4: say ~[We] [can't get] into the closed [noun].~ ( a )] say__p=1;! [5: ~[We] [can't get] into the closed [noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_234); new_line; .L_Say200; .L_SayX200;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_167, 167, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the can't enter if this exceeds carrying capacity rule ): [ R_168 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_168, 168); ! [2: if the noun provides the property carrying capacity] if (((WhetherProvides(noun, false, capacity)))) {! [3: if the noun is a supporter] if (((noun ofclass K6_supporter))) {! [4: if the number of things on the noun is at least the carrying capacity of the noun] if ((((Prop_23()) >= GProperty(OBJECT_TY, noun,capacity)))) {! [5: if the actor is the player] if (((actor == player))) {! [6: now the prior named object is nothing] prior_named_noun = nothing; ! [7: say ~[There] [are] no more room on [the noun].~ ( a )] say__p=1;! [8: ~[There] [are] no more room on [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_235); new_line; .L_Say201; .L_SayX201;} ! [9: stop the action] rtrue; } } else { ! [10: if the noun is a container] if (((noun ofclass K5_container))) {! [11: if the number of things in the noun is at least the carrying capacity of the noun] if ((((Prop_24()) >= GProperty(OBJECT_TY, noun,capacity)))) {! [12: if the actor is the player] if (((actor == player))) {! [13: now the prior named object is nothing] prior_named_noun = nothing; ! [14: say ~[There] [are] no more room in [the noun].~ ( b )] say__p=1;! [15: ~[There] [are] no more room in [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_236); new_line; .L_Say202; .L_SayX202;} ! [16: stop the action] rtrue; } } } } } else if (debug_rules > 1) DB_Rule(R_168, 168, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the can't enter something carried rule ): [ R_169 tmp_0 ! Let/loop value, e.g., 'local ceiling': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_169, 169); ! [2: let the local ceiling be the common ancestor of the actor with the noun] tmp_0 = (CommonAncestor(actor, noun)); ! [3: if the local ceiling is the actor] if (((tmp_0 == actor))) {! [4: if the player is the actor] if (((player == actor))) {! [5: say ~[We] [can] only get into something free-standing.~ ( a )] say__p=1;! [6: ~[We] [can] only get into something free-standing.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_237); new_line; .L_Say203; .L_SayX203;} ! [7: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_169, 169, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor entering ( this is the implicitly pass through other barriers rule ): [ R_170 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'target': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_170, 170); ! [2: if the holder of the actor is the holder of the noun] if ((((HolderOf(actor)) == (HolderOf(noun))))) {! [3: continue the action] rfalse; } ! [4: let the local ceiling be the common ancestor of the actor with the noun] tmp_0 = (CommonAncestor(actor, noun)); ! [5: while the holder of the actor is not the local ceiling] while (((~~(((HolderOf(actor)) == tmp_0))))) {! [6: let the current home be the holder of the actor] tmp_1 = (HolderOf(actor)); ! [7: if the player is the actor] if (((player == actor))) {! [8: if the current home is a supporter or the current home is an animal] if ((((tmp_1 ofclass K6_supporter))) || (((tmp_1 ofclass K12_animal)))) {! [9: say ~(getting off [the current home])[command clarification break]~ ( a )] say__p=1;! [10: ~(getting off [the current home])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_238); .L_Say204; .L_SayX204;} else { ! [11: say ~(getting out of [the current home])[command clarification break]~ ( b )] say__p=1;! [12: ~(getting out of [the current home])[command clarification break]~ ( b )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_239); .L_Say205; .L_SayX205;} } ! [13: silently try the actor trying exiting] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Exit, 0, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [14: if the holder of the actor is the current home] if ((((HolderOf(actor)) == tmp_1))) {! [15: stop the action] rtrue; } } ! [16: if the holder of the actor is the noun] if ((((HolderOf(actor)) == noun))) {! [17: stop the action] rtrue; } ! [18: if the holder of the actor is the holder of the noun] if ((((HolderOf(actor)) == (HolderOf(noun))))) {! [19: continue the action] rfalse; } ! [20: let the target be the holder of the noun] tmp_1 = (HolderOf(noun)); ! [21: if the noun is part of the target] if (((tmp_1 == (noun.component_parent)))) {! [22: let the target be the holder of the target] tmp_1 = (HolderOf(tmp_1)); } ! [23: while the target is a thing] while (((tmp_1 ofclass K2_thing))) {! [24: if the holder of the target is the local ceiling] if ((((HolderOf(tmp_1)) == tmp_0))) {! [25: if the player is the actor] if (((player == actor))) {! [26: if the target is a supporter] if (((tmp_1 ofclass K6_supporter))) {! [27: say ~(getting onto [the target])[command clarification break]~ ( c )] say__p=1;! [28: ~(getting onto [the target])[command clarification break]~ ( c )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_240); .L_Say206; .L_SayX206;} else { ! [29: if the target is a container] if (((tmp_1 ofclass K5_container))) {! [30: say ~(getting into [the target])[command clarification break]~ ( d )] say__p=1;! [31: ~(getting into [the target])[command clarification break]~ ( d )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_241); .L_Say207; .L_SayX207;} else { ! [32: say ~(entering [the target])[command clarification break]~ ( e )] say__p=1;! [33: ~(entering [the target])[command clarification break]~ ( e )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_242); .L_Say208; .L_SayX208;} } } ! [34: silently try the actor trying entering the target] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Enter, tmp_1, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [35: if the holder of the actor is not the target] if (((~~(((HolderOf(actor)) == tmp_1))))) {! [36: stop the action] rtrue; } ! [37: convert to the entering action on the noun] return GVS_Convert(##Enter,noun,0); ! [38: continue the action] rfalse; } ! [39: let the target be the holder of the target] tmp_1 = (HolderOf(tmp_1)); } } else if (debug_rules > 1) DB_Rule(R_170, 170, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Entering (B156_carry_out_entering) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor entering ( this is the standard entering rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor entering ( this is the standard entering rule ): [ R_171 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_171, 171); ! [2: surreptitiously move the actor to the noun] move actor to noun; } else if (debug_rules > 1) DB_Rule(R_171, 171, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Entering (B157_report_entering) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor entering ( this is the standard report entering rule ): ! === equally specific with === ! Rule 2/2 ! Report an actor entering ( this is the describe contents entered into rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor entering ( this is the standard report entering rule ): [ R_172 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_172, 172); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: if the noun is a supporter] if (((noun ofclass K6_supporter))) {! [5: say ~[We] [get] onto [the noun].~ ( a )] say__p=1;! [6: ~[We] [get] onto [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_243); new_line; .L_Say209; .L_SayX209;} else { ! [7: say ~[We] [get] into [the noun].~ ( b )] say__p=1;! [8: ~[We] [get] into [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_244); new_line; .L_Say210; .L_SayX210;} } } else { ! [9: if the noun is a container] if (((noun ofclass K5_container))) {! [10: say ~[The actor] [get] into [the noun].~ ( c )] say__p=1;! [11: ~[The actor] [get] into [the noun].~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_245); new_line; .L_Say211; .L_SayX211;} else { ! [12: say ~[The actor] [get] onto [the noun].~ ( d )] say__p=1;! [13: ~[The actor] [get] onto [the noun].~ ( d )] ParaContent(); print (TEXT_TY_Say) (TX_R_246); new_line; .L_Say212; .L_SayX212;} } ! [14: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_172, 172, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor entering ( this is the describe contents entered into rule ): [ R_173 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_173, 173); ! [2: if the actor is the player] if (((actor == player))) {! [3: describe locale for the noun] (PHR_81_r1 (noun)); } } else if (debug_rules > 1) DB_Rule(R_173, 173, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Exiting (B158_check_exiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check an actor exiting ( this is the convert exit into go out rule ): ! === equally specific with === ! Rule 2/4 ! Check an actor exiting ( this is the can't exit when not inside anything rule ): ! === equally specific with === ! Rule 3/4 ! Check an actor exiting ( this is the can't exit closed containers rule ): ! === equally specific with === ! Rule 4/4 ! Check an actor exiting ( this is the convert exit into get off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor exiting ( this is the convert exit into go out rule ): [ R_175 tmp_0 ! Let/loop value, e.g., 'local room': room ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_175, 175); ! [2: let the local room be the location of the actor] tmp_0 = LocationOf(actor); ! [3: if the container exited from is the local room] if ((((MStack-->MstVO(20009,0)) == tmp_0))) {! [4: if the room-or-door outside from the local room is not nothing] if (((~~((RoomOrDoorFrom(tmp_0,out_obj) == nothing))))) {! [5: convert to the going action on the outside] return GVS_Convert(##Go,out_obj,0); } } } else if (debug_rules > 1) DB_Rule(R_175, 175, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor exiting ( this is the can't exit when not inside anything rule ): [ R_176 tmp_0 ! Let/loop value, e.g., 'local room': room ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_176, 176); ! [2: let the local room be the location of the actor] tmp_0 = LocationOf(actor); ! [3: if the container exited from is the local room] if ((((MStack-->MstVO(20009,0)) == tmp_0))) {! [4: if the player is the actor] if (((player == actor))) {! [5: say ~But [we] [aren't] in anything at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] say__p=1;! [6: ~But [we] [aren't] in anything at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_247); new_line; .L_Say213; .L_SayX213;} ! [7: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_176, 176, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor exiting ( this is the can't exit closed containers rule ): [ R_177 tmp_0 ! Let/loop value, e.g., 'cage': container ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_177, 177); ! [2: if the actor is in a closed container ( called the cage )] if (((ContainerOf(actor) ofclass K5_container) && ((Adj_75_t1_v10(ContainerOf(actor)))) && (tmp_0=(ContainerOf(actor)), true))) {! [3: if the player is the actor] if (((player == actor))) {! [4: say ~You can't get out of the closed [cage].~ ( a )] say__p=1;! [5: ~You can't get out of the closed [cage].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_248); new_line; .L_Say214; .L_SayX214;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_177, 177, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor exiting ( this is the convert exit into get off rule ): [ R_178 tmp_0 ! Let/loop value, e.g., 'platform': supporter ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_178, 178); ! [2: if the actor is on a supporter ( called the platform )] if (((SupporterOf(actor) ofclass K6_supporter) && (tmp_0=(SupporterOf(actor)), true))) {! [3: convert to the getting off action on the platform] return GVS_Convert(##GetOff,tmp_0,0); } } else if (debug_rules > 1) DB_Rule(R_178, 178, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Exiting (B159_carry_out_exiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor exiting ( this is the standard exiting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor exiting ( this is the standard exiting rule ): [ R_179 tmp_0 ! Let/loop value, e.g., 'former exterior': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_179, 179); ! [2: let the former exterior be the not-counting-parts holder of the container exited from] tmp_0 = (CoreOfParentOfCoreOf((MStack-->MstVO(20009,0)))); ! [3: surreptitiously move the actor to the former exterior] move actor to tmp_0; } else if (debug_rules > 1) DB_Rule(R_179, 179, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Exiting (B160_report_exiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor exiting ( this is the standard report exiting rule ): ! === equally specific with === ! Rule 2/2 ! Report an actor exiting ( this is the describe room emerged into rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor exiting ( this is the standard report exiting rule ): [ R_180 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_180, 180); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: if the actor is the player] if (((actor == player))) {! [4: if the container exited from is a supporter] if ((((MStack-->MstVO(20009,0)) ofclass K6_supporter))) {! [5: say ~[We] [get] off [the container exited from].~ ( a )] say__p=1;! [6: ~[We] [get] off [the container exited from].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_249); new_line; .L_Say215; .L_SayX215;} else { ! [7: say ~[We] [get] out of [the container exited from].~ ( b )] say__p=1;! [8: ~[We] [get] out of [the container exited from].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_250); new_line; .L_Say216; .L_SayX216;} } else { ! [9: say ~[The actor] [get] out of [the container exited from].~ ( c )] say__p=1;! [10: ~[The actor] [get] out of [the container exited from].~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_251); new_line; .L_Say217; .L_SayX217;} } ! [11: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_180, 180, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor exiting ( this is the describe room emerged into rule ): [ R_181 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_181, 181); ! [2: if the actor is the player] if (((actor == player))) {! [3: surreptitiously reckon darkness] SilentlyConsiderLight(); ! [4: produce a room description with going spacing conventions] LookAfterGoing(); } } else if (debug_rules > 1) DB_Rule(R_181, 181, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Getting off (B161_check_getting_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor getting off ( this is the can't get off things rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor getting off ( this is the can't get off things rule ): [ R_182 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_182, 182); ! [2: if the actor is on the noun] if (((noun == SupporterOf(actor)))) {! [3: continue the action] rfalse; } ! [4: if the actor is carried by the noun] if (((noun == CarrierOf(actor)))) {! [5: continue the action] rfalse; } ! [6: if the actor is the player] if (((actor == player))) {! [7: say ~But [we] [aren't] on [the noun] at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] say__p=1;! [8: ~But [we] [aren't] on [the noun] at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_252); new_line; .L_Say218; .L_SayX218;} ! [9: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_182, 182, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Getting off (B162_carry_out_getting_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor getting off ( this is the standard getting off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor getting off ( this is the standard getting off rule ): [ R_183 tmp_0 ! Let/loop value, e.g., 'former exterior': object ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_183, 183); ! [2: let the former exterior be the not-counting-parts holder of the noun] tmp_0 = (CoreOfParentOfCoreOf(noun)); ! [3: surreptitiously move the actor to the former exterior] move actor to tmp_0; } else if (debug_rules > 1) DB_Rule(R_183, 183, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Getting off (B163_report_getting_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor getting off ( this is the standard report getting off rule ): ! === equally specific with === ! Rule 2/2 ! Report an actor getting off ( this is the describe room stood up into rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor getting off ( this is the standard report getting off rule ): [ R_184 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_184, 184); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: say ~[The actor] [get] off [the noun].~ ( a )] say__p=1;! [4: ~[The actor] [get] off [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_253); new_line; .L_Say219; .L_SayX219;} ! [5: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_184, 184, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor getting off ( this is the describe room stood up into rule ): [ R_185 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_185, 185); ! [2: if the actor is the player] if (((actor == player))) {! [3: produce a room description with going spacing conventions] LookAfterGoing(); } } else if (debug_rules > 1) DB_Rule(R_185, 185, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Looking (B165_carry_out_looking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! Carry out looking ( this is the declare everything unmentioned rule ): ! === equally specific with === ! Rule 2/5 ! Carry out looking ( this is the room description heading rule ): ! === equally specific with === ! Rule 3/5 ! Carry out looking ( this is the room description body text rule ): ! === equally specific with === ! Rule 4/5 ! Carry out looking ( this is the room description paragraphs about objects rule ): ! === equally specific with === ! Rule 5/5 ! Carry out looking ( this is the check new arrival rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out looking ( this is the declare everything unmentioned rule ): [ R_187 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value (deallocated by end of phrase) ; if (actor == player) { if (debug_rules) DB_Rule(R_187, 187); ! [2: repeat with item running through things] for (tmp_0=Prop_25(0), tmp_1=Prop_25(tmp_0): tmp_0: tmp_0=tmp_1, tmp_1=Prop_25(tmp_1)) {! [3: now the item is not mentioned] (Adj_69_t3_v10(tmp_0)); } } else if (debug_rules > 1) DB_Rule(R_187, 187, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out looking ( this is the room description heading rule ): [ R_188 tmp_0 ! Let/loop value, e.g., 'intermediate level': object tmp_1 ! Let/loop value (deallocated by end of phrase) ; if (actor == player) { if (debug_rules) DB_Rule(R_188, 188); ! [2: say bold type] say__p=1;! [3: bold type] ParaContent(); style bold; .L_Say220; .L_SayX220;! [4: if the visibility level count is 0] if ((((MStack-->MstVO(20011,2)) == 0))) {! [5: begin the printing the name of a dark room activity] BeginActivity(V9_printing_the_name_of_a_da); ! [6: if handling the printing the name of a dark room activity] if (((~~(ForActivity(V9_printing_the_name_of_a_da))))) {! [7: say ~Darkness~ ( a )] say__p=1;! [8: ~Darkness~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_254); .L_Say221; .L_SayX221;} ! [9: end the printing the name of a dark room activity] EndActivity(V9_printing_the_name_of_a_da); } else { ! [10: if the visibility ceiling is the location] if ((((MStack-->MstVO(20011,3)) == real_location))) {! [11: say ~[visibility ceiling]~] say__p=1;! [12: visibility ceiling] ParaContent(); PrintShortName((MStack-->MstVO(20011,3))); .L_Say222; .L_SayX222;} else { ! [13: say ~[The visibility ceiling]~] say__p=1;! [14: the visibility ceiling] ParaContent(); print (The) (MStack-->MstVO(20011,3)); .L_Say223; .L_SayX223;} } ! [15: say roman type] say__p=1;! [16: roman type] ParaContent(); style roman; .L_Say224; .L_SayX224;! [17: let intermediate level be the visibility-holder of the actor] tmp_0 = VisibilityParent(actor); ! [18: repeat with intermediate level count running from 2 to the visibility level count] for (tmp_1=2: tmp_1<=(MStack-->MstVO(20011,2)): tmp_1++) {! [19: if the intermediate level is a supporter or the intermediate level is an animal] if ((((tmp_0 ofclass K6_supporter))) || (((tmp_0 ofclass K12_animal)))) {! [20: say ~ (on [the intermediate level])~ ( b )] say__p=1;! [21: ~ (on [the intermediate level])~ ( b )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_255); .L_Say225; .L_SayX225;} else { ! [22: say ~ (in [the intermediate level])~ ( c )] say__p=1;! [23: ~ (in [the intermediate level])~ ( c )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_256); .L_Say226; .L_SayX226;} ! [24: let the intermediate level be the visibility-holder of the intermediate level] tmp_0 = VisibilityParent(tmp_0); } ! [25: say line break] say__p=1;! [26: line break] ParaContent(); new_line; .L_Say227; .L_SayX227;! [27: say run paragraph on with special look spacing] say__p=1;! [28: run paragraph on with special look spacing] ParaContent(); SpecialLookSpacingBreak(); .L_Say228; .L_SayX228;} else if (debug_rules > 1) DB_Rule(R_188, 188, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out looking ( this is the room description body text rule ): [ R_189 ; if (actor == player) { if (debug_rules) DB_Rule(R_189, 189); ! [2: if the visibility level count is 0] if ((((MStack-->MstVO(20011,2)) == 0))) {! [3: if set to abbreviated room descriptions] if (((lookmode == 3))) {! [4: continue the action] rfalse; } ! [5: if set to sometimes abbreviated room descriptions and abbreviated form allowed is true and darkness witnessed is true] if ((((lookmode == 1))) && ((((((MStack-->MstVO(20011,1)) && true) == (1 && true)))) && (((((Global_Vars-->0) && true) == (1 && true)))))) {! [6: continue the action] rfalse; } ! [7: begin the printing the description of a dark room activity] BeginActivity(V10_printing_the_description); ! [8: if handling the printing the description of a dark room activity] if (((~~(ForActivity(V10_printing_the_description))))) {! [9: now the prior named object is nothing] prior_named_noun = nothing; ! [10: say ~[It] [are] pitch dark, and [we] [can't see] a thing.~ ( a )] say__p=1;! [11: ~[It] [are] pitch dark, and [we] [can't see] a thing.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_257); new_line; .L_Say229; .L_SayX229;} ! [12: end the printing the description of a dark room activity] EndActivity(V10_printing_the_description); } else { ! [13: if the visibility ceiling is the location] if ((((MStack-->MstVO(20011,3)) == real_location))) {! [14: if set to abbreviated room descriptions] if (((lookmode == 3))) {! [15: continue the action] rfalse; } ! [16: if set to sometimes abbreviated room descriptions and abbreviated form allowed is true and the location is visited] if ((((lookmode == 1))) && ((((((MStack-->MstVO(20011,1)) && true) == (1 && true)))) && ((((Adj_53_t1_v10(real_location))))))) {! [17: continue the action] rfalse; } ! [18: print the location's description] PrintOrRun(location, description); } } } else if (debug_rules > 1) DB_Rule(R_189, 189, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out looking ( this is the room description paragraphs about objects rule ): [ R_190 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value (deallocated by end of phrase) tmp_2 ! Let/loop value (deallocated by end of phrase) ; if (actor == player) { if (debug_rules) DB_Rule(R_190, 190); ! [2: if the visibility level count is greater than 0] if ((((MStack-->MstVO(20011,2)) > 0))) {! [3: let the intermediate position be the actor] tmp_0 = actor; ! [4: let the ip count be the visibility level count] tmp_1 = (MStack-->MstVO(20011,2)); ! [5: while the ip count is greater than 0] while (((tmp_1 > 0))) {! [6: now the intermediate position is marked for listing] (Adj_67_t2_v10(tmp_0)); ! [7: let the intermediate position be the visibility-holder of the intermediate position] tmp_0 = VisibilityParent(tmp_0); ! [8: decrease the ip count by 1] tmp_1 = tmp_1 - 1;; } ! [9: let the top-down ip count be the visibility level count] tmp_2 = (MStack-->MstVO(20011,2)); ! [10: while the top-down ip count is greater than 0] while (((tmp_2 > 0))) {! [11: let the intermediate position be the actor] tmp_0 = actor; ! [12: let the ip count be 0] tmp_1 = 0; ! [13: while the ip count is less than the top-down ip count] while (((tmp_1 < tmp_2))) {! [14: let the intermediate position be the visibility-holder of the intermediate position] tmp_0 = VisibilityParent(tmp_0); ! [15: increase the ip count by 1] tmp_1 = tmp_1 + 1;; } ! [16: describe locale for the intermediate position] (PHR_81_r1 (tmp_0)); ! [17: decrease the top-down ip count by 1] tmp_2 = tmp_2 - 1;; } } ! [18: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_190, 190, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out looking ( this is the check new arrival rule ): [ R_191 ; if (actor == player) { if (debug_rules) DB_Rule(R_191, 191); ! [2: if in darkness] if (((location==thedark))) {! [3: now the darkness witnessed is true] (Global_Vars-->0) = 1; } else { ! [4: if the location is a room] if (((real_location ofclass K1_room))) {! [5: now the location is visited] (Adj_53_t2_v10(real_location)); } } } else if (debug_rules > 1) DB_Rule(R_191, 191, 'actor'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Looking (B166_report_looking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor looking ( this is the other people looking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor looking ( this is the other people looking rule ): [ R_192 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_192, 192); ! [2: if the actor is not the player] if (((~~((actor == player))))) {! [3: say ~[The actor] [look] around.~ ( a )] say__p=1;! [4: ~[The actor] [look] around.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_258); new_line; .L_Say230; .L_SayX230;} } else if (debug_rules > 1) DB_Rule(R_192, 192, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Examining (B168_carry_out_examining) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Carry out examining ( this is the standard examining rule ): ! === equally specific with === ! Rule 2/6 ! Carry out examining ( this is the examine directions rule ): ! === equally specific with === ! Rule 3/6 ! Carry out examining ( this is the examine containers rule ): ! === equally specific with === ! Rule 4/6 ! Carry out examining ( this is the examine supporters rule ): ! === equally specific with === ! Rule 5/6 ! Carry out examining ( this is the examine devices rule ): ! === equally specific with === ! Rule 6/6 ! Carry out examining ( this is the examine undescribed things rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out examining ( this is the standard examining rule ): [ R_193 ; if (actor == player) { if (debug_rules) DB_Rule(R_193, 193); ! [2: if the noun provides the property description and the description of the noun is not ~~] if ((((WhetherProvides(noun, false, description)))) && (((~~(( BlkValueCompare(GProperty(OBJECT_TY, noun,description), EMPTY_TEXT_VALUE) == 0)))))) {! [3: say ~[description of the noun][line break]~] say__p=1;! [4: description of the noun] ParaContent(); @push self; print (TEXT_TY_Say) GProperty(OBJECT_TY, self=noun,description);@pull self; ! [5: line break] ParaContent(); new_line; .L_Say231; .L_SayX231;! [6: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; } } else if (debug_rules > 1) DB_Rule(R_193, 193, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out examining ( this is the examine directions rule ): [ R_194 ; if (actor == player) { if (debug_rules) DB_Rule(R_194, 194); ! [2: if the noun is a direction] if (((noun ofclass K3_direction))) {! [3: say ~[We] [see] nothing unexpected in that direction.~ ( a )] say__p=1;! [4: ~[We] [see] nothing unexpected in that direction.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_259); new_line; .L_Say232; .L_SayX232;! [5: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; } } else if (debug_rules > 1) DB_Rule(R_194, 194, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out examining ( this is the examine containers rule ): [ R_195 ; if (actor == player) { if (debug_rules) DB_Rule(R_195, 195); ! [2: if the noun is a container] if (((noun ofclass K5_container))) {! [3: if the noun is open or the noun is transparent] if (((((Adj_74_t1_v10(noun))))) || ((((Adj_73_t1_v10(noun)))))) {! [4: if something described which is not scenery is in the noun and something which is not the player is in the noun] if (((((Prop_26())))) && ((((Prop_27()))))) {! [5: say ~In [the noun] ~ ( a )] say__p=1;! [6: ~In [the noun] ~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_260); .L_Say233; .L_SayX233;! [7: list the contents of the noun , as a sentence , tersely , not listing concealed items , prefacing with is/are] WriteListFrom(child(noun), 3144); ! [8: say ~.~] say__p=1;! [9: ~.~] ParaContent(); print "."; new_line; .L_Say234; .L_SayX234;! [10: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; } else { ! [11: if examine text printed is false] if (((((MStack-->MstVO(20012,0)) && true) == (0 && true)))) {! [12: if the player is in the noun] if (((noun == ContainerOf(player)))) {! [13: make no decision] rfalse; } ! [14: say ~[The noun] [are] empty.~ ( b )] say__p=1;! [15: ~[The noun] [are] empty.~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_261); new_line; .L_Say235; .L_SayX235;! [16: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; } } } } } else if (debug_rules > 1) DB_Rule(R_195, 195, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out examining ( this is the examine supporters rule ): [ R_196 ; if (actor == player) { if (debug_rules) DB_Rule(R_196, 196); ! [2: if the noun is a supporter] if (((noun ofclass K6_supporter))) {! [3: if something described which is not scenery is on the noun and something which is not the player is on the noun] if (((((Prop_28())))) && ((((Prop_29()))))) {! [4: say ~On [the noun] ~ ( a )] say__p=1;! [5: ~On [the noun] ~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_262); .L_Say236; .L_SayX236;! [6: list the contents of the noun , as a sentence , tersely , not listing concealed items , prefacing with is/are , including contents , giving brief inventory information] WriteListFrom(child(noun), 3288); ! [7: say ~.~] say__p=1;! [8: ~.~] ParaContent(); print "."; new_line; .L_Say237; .L_SayX237;! [9: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; } } } else if (debug_rules > 1) DB_Rule(R_196, 196, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out examining ( this is the examine devices rule ): [ R_197 ; if (actor == player) { if (debug_rules) DB_Rule(R_197, 197); ! [2: if the noun is a device] if (((noun ofclass K13_device))) {! [3: say ~[The noun] [are] [if story tense is present tense]currently [end if]switched [if the noun is switched on]on[otherwise]off[end if].~ ( a )] say__p=1;! [4: ~[The noun] [are] [if story tense is present tense]currently [end if]switched [if the noun is switched on]on[otherwise]off[end if].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_263); new_line; .L_Say238; .L_SayX238;! [5: now examine text printed is true] (MStack-->MstVO(20012,0)) = 1; } } else if (debug_rules > 1) DB_Rule(R_197, 197, 'actor'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out examining ( this is the examine undescribed things rule ): [ R_198 ; if (actor == player) { if (debug_rules) DB_Rule(R_198, 198); ! [2: if examine text printed is false] if (((((MStack-->MstVO(20012,0)) && true) == (0 && true)))) {! [3: say ~[We] [see] nothing special about [the noun].~ ( a )] say__p=1;! [4: ~[We] [see] nothing special about [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_264); new_line; .L_Say239; .L_SayX239;} } else if (debug_rules > 1) DB_Rule(R_198, 198, 'actor'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Examining (B169_report_examining) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor examining ( this is the report other people examining rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor examining ( this is the report other people examining rule ): [ R_199 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_199, 199); ! [2: if the actor is not the player] if (((~~((actor == player))))) {! [3: say ~[The actor] [look] closely at [the noun].~ ( a )] say__p=1;! [4: ~[The actor] [look] closely at [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_265); new_line; .L_Say240; .L_SayX240;} } else if (debug_rules > 1) DB_Rule(R_199, 199, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Looking under (B171_carry_out_looking_under) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor looking under ( this is the standard looking under rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor looking under ( this is the standard looking under rule ): [ R_200 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_200, 200); ! [2: if the player is the actor] if (((player == actor))) {! [3: say ~[We] [find] nothing of interest.~ ( a )] say__p=1;! [4: ~[We] [find] nothing of interest.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_266); new_line; .L_Say241; .L_SayX241;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_200, 200, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Looking under (B172_report_looking_under) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor looking under ( this is the report other people looking under rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor looking under ( this is the report other people looking under rule ): [ R_201 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_201, 201); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: if the actor is not the player] if (((~~((actor == player))))) {! [4: say ~[The actor] [look] under [the noun].~ ( a )] say__p=1;! [5: ~[The actor] [look] under [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_267); new_line; .L_Say242; .L_SayX242;} } } else if (debug_rules > 1) DB_Rule(R_201, 201, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Searching (B173_check_searching) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor searching ( this is the can't search unless container or supporter rule ): ! === equally specific with === ! Rule 2/2 ! Check an actor searching ( this is the can't search closed opaque containers rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor searching ( this is the can't search unless container or supporter rule ): [ R_202 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_202, 202); ! [2: if the noun is not a container and the noun is not a supporter] if ((((~~((noun ofclass K5_container))))) && (((~~((noun ofclass K6_supporter)))))) {! [3: if the player is the actor] if (((player == actor))) {! [4: say ~[We] [find] nothing of interest.~ ( a )] say__p=1;! [5: ~[We] [find] nothing of interest.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_268); new_line; .L_Say243; .L_SayX243;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_202, 202, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor searching ( this is the can't search closed opaque containers rule ): [ R_203 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_203, 203); ! [2: if the noun is a closed opaque container] if (((noun ofclass K5_container) && ((Adj_75_t1_v10(noun))) && ((Adj_72_t1_v10(noun))))) {! [3: if the player is the actor] if (((player == actor))) {! [4: say ~[We] [can't see] inside, since [the noun] [are] closed.~ ( a )] say__p=1;! [5: ~[We] [can't see] inside, since [the noun] [are] closed.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_269); new_line; .L_Say244; .L_SayX244;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_203, 203, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Searching (B175_report_searching) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Report searching a container ( this is the standard search containers rule ): ! === equally specific with === ! Rule 2/3 ! Report searching a supporter ( this is the standard search supporters rule ): ! >>> I - Number of aspects constrained >>> ! Rule 3/3 ! Report an actor searching ( this is the report other people searching rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report searching a container ( this is the standard search containers rule ): [ R_204 ; if ((( (actor==player) && ((noun ofclass K5_container))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_204, 204); ! [2: if the noun contains a described thing which is not scenery] if ((((Prop_30())))) {! [3: say ~In [the noun] ~ ( a )] say__p=1;! [4: ~In [the noun] ~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_270); .L_Say245; .L_SayX245;! [5: list the contents of the noun , as a sentence , tersely , not listing concealed items , prefacing with is/are] WriteListFrom(child(noun), 3144); ! [6: say ~.~] say__p=1;! [7: ~.~] ParaContent(); print "."; new_line; .L_Say246; .L_SayX246;} else { ! [8: say ~[The noun] [are] empty.~ ( b )] say__p=1;! [9: ~[The noun] [are] empty.~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_271); new_line; .L_Say247; .L_SayX247;} } else if (debug_rules > 1) DB_Rule(R_204, 204, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report searching a supporter ( this is the standard search supporters rule ): [ R_205 ; if ((( (actor==player) && ((noun ofclass K6_supporter))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_205, 205); ! [2: if the noun supports a described thing which is not scenery] if ((((Prop_31())))) {! [3: say ~On [the noun] ~ ( a )] say__p=1;! [4: ~On [the noun] ~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_272); .L_Say248; .L_SayX248;! [5: list the contents of the noun , as a sentence , tersely , not listing concealed items , prefacing with is/are] WriteListFrom(child(noun), 3144); ! [6: say ~.~] say__p=1;! [7: ~.~] ParaContent(); print "."; new_line; .L_Say249; .L_SayX249;} else { ! [8: now the prior named object is nothing] prior_named_noun = nothing; ! [9: say ~[There] [are] nothing on [the noun].~ ( b )] say__p=1;! [10: ~[There] [are] nothing on [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_273); new_line; .L_Say250; .L_SayX250;} } else if (debug_rules > 1) DB_Rule(R_205, 205, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor searching ( this is the report other people searching rule ): [ R_206 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_206, 206); ! [2: if the actor is not the player] if (((~~((actor == player))))) {! [3: say ~[The actor] [search] [the noun].~ ( a )] say__p=1;! [4: ~[The actor] [search] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_274); new_line; .L_Say251; .L_SayX251;} } else if (debug_rules > 1) DB_Rule(R_206, 206, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Consulting it about (B178_report_consulting_it_ab) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor consulting something about ( this is the block consulting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor consulting something about ( this is the block consulting rule ): [ R_207 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_207, 207); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[We] [discover] nothing of interest in [the noun].~ ( a )] say__p=1;! [4: ~[We] [discover] nothing of interest in [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_275); new_line; .L_Say252; .L_SayX252;} else { ! [5: say ~[The actor] [look] at [the noun].~ ( b )] say__p=1;! [6: ~[The actor] [look] at [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_276); new_line; .L_Say253; .L_SayX253;} } else if (debug_rules > 1) DB_Rule(R_207, 207, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Locking it with (B179_check_locking_it_with) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/5 ! Check an actor locking something with ( this is the can't lock without a lock rule ): ! === equally specific with === ! Rule 2/5 ! Check an actor locking something with ( this is the can't lock what's already locked rule ): ! === equally specific with === ! Rule 3/5 ! Check an actor locking something with ( this is the can't lock what's open rule ): ! >>> I - Number of aspects constrained >>> ! Rule 4/5 ! This is the right second rule: ! === equally specific with === ! Rule 5/5 ! Check locking it with: ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor locking something with ( this is the can't lock without a lock rule ): [ R_208 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_208, 208); ! [2: if the noun provides the property lockable and the noun is lockable] if ((((WhetherProvides(noun, true, lockable)))) && ((((Adj_78_t1_v10(noun)))))) {! [3: continue the action] rfalse; } ! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[regarding the noun][Those] [don't] seem to be something [we] [can] lock.~ ( a )] say__p=1;! [6: ~[regarding the noun][Those] [don't] seem to be something [we] [can] lock.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_277); new_line; .L_Say254; .L_SayX254;} ! [7: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_208, 208, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor locking something with ( this is the can't lock what's already locked rule ): [ R_209 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_209, 209); ! [2: if the noun is locked] if ((((Adj_79_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] locked at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] locked at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_278); new_line; .L_Say255; .L_SayX255;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_209, 209, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor locking something with ( this is the can't lock what's open rule ): [ R_210 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_210, 210); ! [2: if the noun is open] if ((((Adj_74_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~First [we] [would have] to close [the noun].~ ( a )] say__p=1;! [5: ~First [we] [would have] to close [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_279); new_line; .L_Say256; .L_SayX256;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_210, 210, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the right second rule: [ R_830 ; if (debug_rules) DB_Rule(R_830, 830); ! [2: if the second noun does not unlock the noun] if (((~~((second == (RGuard_f0_1(noun))))))) {! [3: say ~[The second noun] [do not fit] [the noun].~ ( a )] say__p=1;! [4: ~[The second noun] [do not fit] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_280); new_line; .L_Say257; .L_SayX257;rtrue; } rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Check locking it with: [ R_833 ; if (actor == player) { if (debug_rules) DB_Rule(R_833, 833); ! [2: abide by the must have accessible the second noun rule] if (FollowRulebook(R_851)) rtrue; } else if (debug_rules > 1) DB_Rule(R_833, 833, 'actor'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Locking it with (B180_carry_out_locking_it_wi) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out locking something with a passkey ( this is the standard passkey locking rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 2/2 ! Carry out an actor locking something with ( this is the standard locking rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Carry out locking something with a passkey ( this is the standard passkey locking rule ): [ R_841 ; if ((( (actor==player) && ((noun ofclass K2_thing)) && ((second ofclass K16_passkey))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_841, 841); ! [2: if the second noun unlocks the noun] if (((second == (RGuard_f0_1(noun))))) {! [3: now the second noun unbolts the noun] (RGuard_MT_2(second,noun)); } } else if (debug_rules > 1) DB_Rule(R_841, 841, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out an actor locking something with ( this is the standard locking rule ): [ R_212 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_212, 212); ! [2: now the noun is locked] (Adj_79_t2_v10(noun)); } else if (debug_rules > 1) DB_Rule(R_212, 212, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Locking it with (B181_report_locking_it_with) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report someone trying locking something with a passkey ( this is the observe someone locking rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 2/2 ! Report an actor locking something with ( this is the standard report locking rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Report someone trying locking something with a passkey ( this is the observe someone locking rule ): [ R_842 ; if ((( (actor~=player) && (act_requester==nothing) && ((actor ofclass K8_person)) && ((noun ofclass K2_thing)) && ((second ofclass K16_passkey))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_842, 842); ! [2: now the second noun unbolts the noun] (RGuard_MT_2(second,noun)); } else if (debug_rules > 1) DB_Rule(R_842, 842, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor locking something with ( this is the standard report locking rule ): [ R_213 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_213, 213); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [lock] [the noun].~ ( a )] say__p=1;! [5: ~[We] [lock] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_281); new_line; .L_Say258; .L_SayX258;} } else { ! [6: if the actor is visible] if ((((Adj_3_t1_v10(actor))))) {! [7: say ~[The actor] [lock] [the noun].~ ( b )] say__p=1;! [8: ~[The actor] [lock] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_282); new_line; .L_Say259; .L_SayX259;} } } else if (debug_rules > 1) DB_Rule(R_213, 213, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Unlocking it with (B182_check_unlocking_it_with) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check an actor unlocking something with ( this is the can't unlock without a lock rule ): ! === equally specific with === ! Rule 2/4 ! Check an actor unlocking something with ( this is the can't unlock what's already unlocked rule ): ! >>> I - Number of aspects constrained >>> ! Rule 3/4 ! This is the right second rule: ! === equally specific with === ! Rule 4/4 ! Check unlocking it with ( this is the must be able to reach the key rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor unlocking something with ( this is the can't unlock without a lock rule ): [ R_214 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_214, 214); ! [2: if the noun provides the property lockable and the noun is lockable] if ((((WhetherProvides(noun, true, lockable)))) && ((((Adj_78_t1_v10(noun)))))) {! [3: continue the action] rfalse; } ! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[regarding the noun][Those] [don't] seem to be something [we] [can] unlock.~ ( a )] say__p=1;! [6: ~[regarding the noun][Those] [don't] seem to be something [we] [can] unlock.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_283); new_line; .L_Say260; .L_SayX260;} ! [7: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_214, 214, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor unlocking something with ( this is the can't unlock what's already unlocked rule ): [ R_215 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_215, 215); ! [2: if the noun is not locked] if (((~~(((Adj_79_t1_v10(noun))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] unlocked at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] unlocked at the [if story tense is present tense]moment[otherwise]time[end if].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_284); new_line; .L_Say261; .L_SayX261;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_215, 215, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Check unlocking it with ( this is the must be able to reach the key rule ): [ R_829 ; if (actor == player) { if (debug_rules) DB_Rule(R_829, 829); ! [2: abide by the must have accessible the second noun rule] if (FollowRulebook(R_851)) rtrue; } else if (debug_rules > 1) DB_Rule(R_829, 829, 'actor'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Unlocking it with (B183_carry_out_unlocking_it_) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Carry out unlocking the lockbox with the wide key: ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 2/3 ! Carry out unlocking something with a passkey ( this is the standard passkey unlocking rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 3/3 ! Carry out an actor unlocking something with ( this is the standard unlocking rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Carry out unlocking the lockbox with the wide key: [ R_882 ; if ((( (actor==player) && ((noun == I163_lockbox) && (true)) && ((second == I146_wide_key) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_882, 882); ! [2: now a thin key is in the lockbox] MoveObject(I131_thin_key,I163_lockbox); } else if (debug_rules > 1) DB_Rule(R_882, 882, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! Carry out unlocking something with a passkey ( this is the standard passkey unlocking rule ): [ R_839 ; if ((( (actor==player) && ((noun ofclass K2_thing)) && ((second ofclass K16_passkey))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_839, 839); ! [2: if the second noun unlocks the noun] if (((second == (RGuard_f0_1(noun))))) {! [3: now the second noun unbolts the noun] (RGuard_MT_2(second,noun)); } } else if (debug_rules > 1) DB_Rule(R_839, 839, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out an actor unlocking something with ( this is the standard unlocking rule ): [ R_217 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_217, 217); ! [2: now the noun is not locked] (Adj_79_t3_v10(noun)); } else if (debug_rules > 1) DB_Rule(R_217, 217, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Unlocking it with (B184_report_unlocking_it_wit) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report someone trying unlocking something with a passkey ( this is the observe someone unlocking rule ): ! >>> III.3.1 - Action/What/Second Thing Acted On >>> ! Rule 2/2 ! Report an actor unlocking something with ( this is the standard report unlocking rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Report someone trying unlocking something with a passkey ( this is the observe someone unlocking rule ): [ R_840 ; if ((( (actor~=player) && (act_requester==nothing) && ((actor ofclass K8_person)) && ((noun ofclass K2_thing)) && ((second ofclass K16_passkey))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_840, 840); ! [2: now the second noun unbolts the noun] (RGuard_MT_2(second,noun)); } else if (debug_rules > 1) DB_Rule(R_840, 840, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor unlocking something with ( this is the standard report unlocking rule ): [ R_218 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_218, 218); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [unlock] [the noun].~ ( a )] say__p=1;! [5: ~[We] [unlock] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_285); new_line; .L_Say262; .L_SayX262;} } else { ! [6: if the actor is visible] if ((((Adj_3_t1_v10(actor))))) {! [7: say ~[The actor] [unlock] [the noun].~ ( b )] say__p=1;! [8: ~[The actor] [unlock] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_286); new_line; .L_Say263; .L_SayX263;} } } else if (debug_rules > 1) DB_Rule(R_218, 218, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Switching on (B185_check_switching_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check switching on the left switch: ! === equally specific with === ! Rule 2/4 ! Check switching on the right switch: ! >>> I - Number of aspects constrained >>> ! Rule 3/4 ! Check an actor switching on ( this is the can't switch on unless switchable rule ): ! === equally specific with === ! Rule 4/4 ! Check an actor switching on ( this is the can't switch on what's already on rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Check switching on the left switch: [ R_874 ; if ((( (actor==player) && ((noun == I150_left_switch) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_874, 874); ! [2: say ~The bulb above it comes on for a few seconds, then goes dark again.~] say__p=1;! [3: ~The bulb above it comes on for a few seconds, then goes dark again.~] ParaContent(); print "The bulb above it comes on for a few seconds, then goes dark again."; new_line; .L_Say264; .L_SayX264;! [4: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_874, 874, 'action'); rfalse; ]; ! No specific request ! Check switching on the right switch: [ R_876 ; if ((( (actor==player) && ((noun == I151_right_switch) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_876, 876); ! [2: say ~The bulb above it blinks on for just a moment before turning off again.~] say__p=1;! [3: ~The bulb above it blinks on for just a moment before turning off again.~] ParaContent(); print "The bulb above it blinks on for just a moment before turning off again."; new_line; .L_Say265; .L_SayX265;! [4: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_876, 876, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor switching on ( this is the can't switch on unless switchable rule ): [ R_219 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_219, 219); ! [2: if the noun provides the property switched on] if (((WhetherProvides(noun, true, on)))) {! [3: continue the action] rfalse; } ! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[regarding the noun][They] [aren't] something [we] [can] switch.~ ( a )] say__p=1;! [6: ~[regarding the noun][They] [aren't] something [we] [can] switch.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_287); new_line; .L_Say266; .L_SayX266;} ! [7: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_219, 219, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor switching on ( this is the can't switch on what's already on rule ): [ R_220 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_220, 220); ! [2: if the noun is switched on] if ((((Adj_84_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] already on.~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] already on.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_288); new_line; .L_Say267; .L_SayX267;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_220, 220, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching on (B186_carry_out_switching_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor switching on ( this is the standard switching on rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor switching on ( this is the standard switching on rule ): [ R_221 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_221, 221); ! [2: now the noun is switched on] (Adj_84_t2_v10(noun)); } else if (debug_rules > 1) DB_Rule(R_221, 221, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Switching on (B187_report_switching_on) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor switching on ( this is the standard report switching on rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor switching on ( this is the standard report switching on rule ): [ R_222 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_222, 222); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: say ~[The actor] [switch] [the noun] on.~ ( a )] say__p=1;! [4: ~[The actor] [switch] [the noun] on.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_289); new_line; .L_Say268; .L_SayX268;} } else if (debug_rules > 1) DB_Rule(R_222, 222, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Switching off (B188_check_switching_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor switching off ( this is the can't switch off unless switchable rule ): ! === equally specific with === ! Rule 2/2 ! Check an actor switching off ( this is the can't switch off what's already off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor switching off ( this is the can't switch off unless switchable rule ): [ R_223 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_223, 223); ! [2: if the noun provides the property switched on] if (((WhetherProvides(noun, true, on)))) {! [3: continue the action] rfalse; } ! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[regarding the noun][They] [aren't] something [we] [can] switch.~ ( a )] say__p=1;! [6: ~[regarding the noun][They] [aren't] something [we] [can] switch.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_290); new_line; .L_Say269; .L_SayX269;} ! [7: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_223, 223, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor switching off ( this is the can't switch off what's already off rule ): [ R_224 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_224, 224); ! [2: if the noun is switched off] if ((((Adj_85_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] already off.~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] already off.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_291); new_line; .L_Say270; .L_SayX270;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_224, 224, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Switching off (B189_carry_out_switching_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor switching off ( this is the standard switching off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor switching off ( this is the standard switching off rule ): [ R_225 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_225, 225); ! [2: now the noun is switched off] (Adj_85_t2_v10(noun)); } else if (debug_rules > 1) DB_Rule(R_225, 225, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Switching off (B190_report_switching_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor switching off ( this is the standard report switching off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor switching off ( this is the standard report switching off rule ): [ R_226 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_226, 226); ! [2: if the action is not silent] if (((keep_silent == false))) {! [3: say ~[The actor] [switch] [the noun] off.~ ( a )] say__p=1;! [4: ~[The actor] [switch] [the noun] off.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_292); new_line; .L_Say271; .L_SayX271;} } else if (debug_rules > 1) DB_Rule(R_226, 226, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Opening (B191_check_opening) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor opening ( this is the can't open unless openable rule ): ! === equally specific with === ! Rule 2/3 ! Check an actor opening ( this is the can't open what's locked rule ): ! === equally specific with === ! Rule 3/3 ! Check an actor opening ( this is the can't open what's already open rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor opening ( this is the can't open unless openable rule ): [ R_227 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_227, 227); ! [2: if the noun provides the property openable and the noun is openable] if ((((WhetherProvides(noun, true, openable)))) && ((((Adj_76_t1_v10(noun)))))) {! [3: continue the action] rfalse; } ! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[regarding the noun][They] [aren't] something [we] [can] open.~ ( a )] say__p=1;! [6: ~[regarding the noun][They] [aren't] something [we] [can] open.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_293); new_line; .L_Say272; .L_SayX272;} ! [7: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_227, 227, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor opening ( this is the can't open what's locked rule ): [ R_228 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_228, 228); ! [2: if the noun provides the property lockable and the noun is locked] if ((((WhetherProvides(noun, true, lockable)))) && ((((Adj_79_t1_v10(noun)))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They] [seem] to be locked.~ ( a )] say__p=1;! [5: ~[regarding the noun][They] [seem] to be locked.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_294); new_line; .L_Say273; .L_SayX273;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_228, 228, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor opening ( this is the can't open what's already open rule ): [ R_229 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_229, 229); ! [2: if the noun is open] if ((((Adj_74_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] already open.~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] already open.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_295); new_line; .L_Say274; .L_SayX274;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_229, 229, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Opening (B192_carry_out_opening) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Carry out opening the door: ! >>> I - Number of aspects constrained >>> ! Rule 2/2 ! Carry out an actor opening ( this is the standard opening rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Carry out opening the door: [ R_904 ; if ((( (actor==player) && ((noun ofclass K4_door))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_904, 904); ! [2: if the player is in the upper landing] if (((I179_upper_landing == ContainerOf(player)))) {! [3: say ~To your surprise, the door is unlocked and the handle turns easily. You slam the door open, determined to face whatever's on the other side with bravery.~] say__p=1;! [4: ~To your surprise, the door is unlocked and the handle turns easily. You slam the door open, determined to face whatever's on the other side with bravery.~] ParaContent(); print "To your surprise, the door is unlocked and the handle turns easily. You slam the door open, determined to face whatever's on the other side with bravery."; new_line; .L_Say275; .L_SayX275;! [5: wait for any key] KeyPause(); ! [6: say ~[paragraph break]~] say__p=1;! [7: paragraph break] ParaContent(); DivideParagraphPoint(); new_line; .L_Say276; .L_SayX276;! [8: now the player is in the observation room] MoveObject(player,I181_observation_room); ! [9: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_904, 904, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Carry out an actor opening ( this is the standard opening rule ): [ R_230 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_230, 230); ! [2: now the noun is open] (Adj_74_t2_v10(noun)); } else if (debug_rules > 1) DB_Rule(R_230, 230, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Opening (B193_report_opening) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report an actor opening ( this is the reveal any newly visible interior rule ): ! === equally specific with === ! Rule 2/2 ! Report an actor opening ( this is the standard report opening rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor opening ( this is the reveal any newly visible interior rule ): [ R_231 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_231, 231); ! [2: if the actor is the player and the noun is an opaque container and the first thing held by the noun is not nothing and the noun does not enclose the actor] if ((((actor == player))) && ((((noun ofclass K5_container) && ((Adj_72_t1_v10(noun))))) && ((((~~(((child(noun)) == nothing))))) && (((~~((IndirectlyContains(noun,actor))))))))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[We] [open] [the noun], revealing ~ ( a )] say__p=1;! [6: ~[We] [open] [the noun], revealing ~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_296); .L_Say277; .L_SayX277;! [7: list the contents of the noun , as a sentence , tersely , not listing concealed items] WriteListFrom(child(noun), 2120); ! [8: say ~.~] say__p=1;! [9: ~.~] ParaContent(); print "."; new_line; .L_Say278; .L_SayX278;} } ! [10: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_231, 231, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor opening ( this is the standard report opening rule ): [ R_232 ; if (((((action ==##Open) && (actor==player) && ((noun == I180_steel_door) && (true)))))) rfalse; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_232, 232); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [open] [the noun].~ ( a )] say__p=1;! [5: ~[We] [open] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_297); new_line; .L_Say279; .L_SayX279;} } else { ! [6: if the player can see the actor] if (((TestVisibility(player,actor)))) {! [7: say ~[The actor] [open] [the noun].~ ( b )] say__p=1;! [8: ~[The actor] [open] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_298); new_line; .L_Say280; .L_SayX280;} else { ! [9: say ~[The noun] [open].~ ( c )] say__p=1;! [10: ~[The noun] [open].~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_299); new_line; .L_Say281; .L_SayX281;} } } else if (debug_rules > 1) DB_Rule(R_232, 232, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Closing (B194_check_closing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor closing ( this is the can't close unless openable rule ): ! === equally specific with === ! Rule 2/2 ! Check an actor closing ( this is the can't close what's already closed rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor closing ( this is the can't close unless openable rule ): [ R_233 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_233, 233); ! [2: if the noun provides the property openable and the noun is openable] if ((((WhetherProvides(noun, true, openable)))) && ((((Adj_76_t1_v10(noun)))))) {! [3: continue the action] rfalse; } ! [4: if the actor is the player] if (((actor == player))) {! [5: say ~[regarding the noun][They] [aren't] something [we] [can] close.~ ( a )] say__p=1;! [6: ~[regarding the noun][They] [aren't] something [we] [can] close.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_300); new_line; .L_Say282; .L_SayX282;} ! [7: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_233, 233, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor closing ( this is the can't close what's already closed rule ): [ R_234 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_234, 234); ! [2: if the noun is closed] if ((((Adj_75_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They're] already closed.~ ( a )] say__p=1;! [5: ~[regarding the noun][They're] already closed.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_301); new_line; .L_Say283; .L_SayX283;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_234, 234, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Closing (B195_carry_out_closing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor closing ( this is the standard closing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor closing ( this is the standard closing rule ): [ R_235 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_235, 235); ! [2: now the noun is closed] (Adj_75_t2_v10(noun)); } else if (debug_rules > 1) DB_Rule(R_235, 235, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Closing (B196_report_closing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor closing ( this is the standard report closing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor closing ( this is the standard report closing rule ): [ R_236 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_236, 236); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [close] [the noun].~ ( a )] say__p=1;! [5: ~[We] [close] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_302); new_line; .L_Say284; .L_SayX284;} } else { ! [6: if the player can see the actor] if (((TestVisibility(player,actor)))) {! [7: say ~[The actor] [close] [the noun].~ ( b )] say__p=1;! [8: ~[The actor] [close] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_303); new_line; .L_Say285; .L_SayX285;} else { ! [9: say ~[The noun] [close].~ ( c )] say__p=1;! [10: ~[The noun] [close].~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_304); new_line; .L_Say286; .L_SayX286;} } } else if (debug_rules > 1) DB_Rule(R_236, 236, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Wearing (B197_check_wearing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor wearing ( this is the can't wear what's not clothing rule ): ! === equally specific with === ! Rule 2/3 ! Check an actor wearing ( this is the can't wear what's not held rule ): ! === equally specific with === ! Rule 3/3 ! Check an actor wearing ( this is the can't wear what's already worn rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor wearing ( this is the can't wear what's not clothing rule ): [ R_237 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_237, 237); ! [2: if the noun is not a thing or the noun is not wearable] if ((((~~((noun ofclass K2_thing))))) || (((~~(((Adj_62_t1_v10(noun)))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [can't wear] [regarding the noun][those]!~ ( a )] say__p=1;! [5: ~[We] [can't wear] [regarding the noun][those]!~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_305); new_line; .L_Say287; .L_SayX287;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_237, 237, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor wearing ( this is the can't wear what's not held rule ): [ R_238 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_238, 238); ! [2: if the holder of the noun is not the actor] if (((~~(((HolderOf(noun)) == actor))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [aren't] holding [regarding the noun][those]!~ ( a )] say__p=1;! [5: ~[We] [aren't] holding [regarding the noun][those]!~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_306); new_line; .L_Say288; .L_SayX288;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_238, 238, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor wearing ( this is the can't wear what's already worn rule ): [ R_239 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_239, 239); ! [2: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We]['re] already wearing [regarding the noun][those]!~ ( a )] say__p=1;! [5: ~[We]['re] already wearing [regarding the noun][those]!~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_307); new_line; .L_Say289; .L_SayX289;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_239, 239, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Wearing (B198_carry_out_wearing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor wearing ( this is the standard wearing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor wearing ( this is the standard wearing rule ): [ R_240 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_240, 240); ! [2: now the actor wears the noun] WearObject(noun,actor); } else if (debug_rules > 1) DB_Rule(R_240, 240, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Wearing (B199_report_wearing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor wearing ( this is the standard report wearing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor wearing ( this is the standard report wearing rule ): [ R_241 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_241, 241); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [put] on [the noun].~ ( a )] say__p=1;! [5: ~[We] [put] on [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_308); new_line; .L_Say290; .L_SayX290;} } else { ! [6: say ~[The actor] [put] on [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [put] on [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_309); new_line; .L_Say291; .L_SayX291;} } else if (debug_rules > 1) DB_Rule(R_241, 241, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Taking off (B200_check_taking_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor taking off ( this is the can't take off what's not worn rule ): ! === equally specific with === ! Rule 2/2 ! Check an actor taking off ( this is the can't exceed carrying capacity when taking off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor taking off ( this is the can't take off what's not worn rule ): [ R_243 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_243, 243); ! [2: if the actor is not wearing the noun] if (((~~((actor == WearerOf(noun)))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [aren't] wearing [the noun].~ ( a )] say__p=1;! [5: ~[We] [aren't] wearing [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_310); new_line; .L_Say292; .L_SayX292;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_243, 243, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor taking off ( this is the can't exceed carrying capacity when taking off rule ): [ R_244 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_244, 244); ! [2: if the number of things carried by the actor is at least the carrying capacity of the actor] if ((((Prop_32()) >= GProperty(10, actor,capacity)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We]['re] carrying too many things already.~ ( a )] say__p=1;! [5: ~[We]['re] carrying too many things already.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_311); new_line; .L_Say293; .L_SayX293;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_244, 244, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Taking off (B201_carry_out_taking_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor taking off ( this is the standard taking off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor taking off ( this is the standard taking off rule ): [ R_245 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_245, 245); ! [2: now the actor carries the noun] MoveObject(noun,actor); } else if (debug_rules > 1) DB_Rule(R_245, 245, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Taking off (B202_report_taking_off) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor taking off ( this is the standard report taking off rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor taking off ( this is the standard report taking off rule ): [ R_246 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_246, 246); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [take] off [the noun].~ ( a )] say__p=1;! [5: ~[We] [take] off [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_312); new_line; .L_Say294; .L_SayX294;} } else { ! [6: say ~[The actor] [take] off [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [take] off [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_313); new_line; .L_Say295; .L_SayX295;} } else if (debug_rules > 1) DB_Rule(R_246, 246, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Giving it to (B203_check_giving_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check an actor giving something to ( this is the can't give what you haven't got rule ): ! === equally specific with === ! Rule 2/6 ! Check an actor giving something to ( this is the can't give to yourself rule ): ! === equally specific with === ! Rule 3/6 ! Check an actor giving something to ( this is the can't give to a non-person rule ): ! === equally specific with === ! Rule 4/6 ! Check an actor giving something to ( this is the can't give clothes being worn rule ): ! === equally specific with === ! Rule 5/6 ! Check an actor giving something to ( this is the block giving rule ): ! === equally specific with === ! Rule 6/6 ! Check an actor giving something to ( this is the can't exceed carrying capacity when giving rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor giving something to ( this is the can't give what you haven't got rule ): [ R_247 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_247, 247); ! [2: if the actor is not the holder of the noun] if (((~~((actor == (HolderOf(noun))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [aren't] holding [the noun].~ ( a )] say__p=1;! [5: ~[We] [aren't] holding [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_314); new_line; .L_Say296; .L_SayX296;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_247, 247, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor giving something to ( this is the can't give to yourself rule ): [ R_248 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_248, 248); ! [2: if the actor is the second noun] if (((actor == second))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [can't give] [the noun] to [ourselves].~ ( a )] say__p=1;! [5: ~[We] [can't give] [the noun] to [ourselves].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_315); new_line; .L_Say297; .L_SayX297;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_248, 248, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor giving something to ( this is the can't give to a non-person rule ): [ R_249 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_249, 249); ! [2: if the second noun is not a person] if (((~~((second ofclass K8_person))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The second noun] [aren't] able to receive things.~ ( a )] say__p=1;! [5: ~[The second noun] [aren't] able to receive things.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_316); new_line; .L_Say298; .L_SayX298;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_249, 249, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor giving something to ( this is the can't give clothes being worn rule ): [ R_250 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_250, 250); ! [2: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [3: say ~(first taking [the noun] off)[command clarification break]~ ( a )] say__p=1;! [4: ~(first taking [the noun] off)[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_317); .L_Say299; .L_SayX299;! [5: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Disrobe, noun, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [6: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [7: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_250, 250, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor giving something to ( this is the block giving rule ): [ R_251 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_251, 251); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[The second noun] [don't] seem interested.~ ( a )] say__p=1;! [4: ~[The second noun] [don't] seem interested.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_318); new_line; .L_Say300; .L_SayX300;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_251, 251, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor giving something to ( this is the can't exceed carrying capacity when giving rule ): [ R_252 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_252, 252); ! [2: if the number of things carried by the second noun is at least the carrying capacity of the second noun] if ((((Prop_33()) >= GProperty(OBJECT_TY, second,capacity)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The second noun] [are] carrying too many things already.~ ( a )] say__p=1;! [5: ~[The second noun] [are] carrying too many things already.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_319); new_line; .L_Say301; .L_SayX301;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_252, 252, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Giving it to (B204_carry_out_giving_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor giving something to ( this is the standard giving rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Carry out an actor giving something to ( this is the standard giving rule ): [ R_253 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_253, 253); ! [2: move the noun to the second noun] MoveObject(noun, second, 0, false); } else if (debug_rules > 1) DB_Rule(R_253, 253, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Giving it to (B205_report_giving_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor giving something to ( this is the standard report giving rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor giving something to ( this is the standard report giving rule ): [ R_254 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_254, 254); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[We] [give] [the noun] to [the second noun].~ ( a )] say__p=1;! [4: ~[We] [give] [the noun] to [the second noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_320); new_line; .L_Say302; .L_SayX302;} else { ! [5: if the second noun is the player] if (((second == player))) {! [6: say ~[The actor] [give] [the noun] to [us].~ ( b )] say__p=1;! [7: ~[The actor] [give] [the noun] to [us].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_321); new_line; .L_Say303; .L_SayX303;} else { ! [8: say ~[The actor] [give] [the noun] to [the second noun].~ ( c )] say__p=1;! [9: ~[The actor] [give] [the noun] to [the second noun].~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_322); new_line; .L_Say304; .L_SayX304;} } } else if (debug_rules > 1) DB_Rule(R_254, 254, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Showing it to (B206_check_showing_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor showing something to ( this is the can't show what you haven't got rule ): ! === equally specific with === ! Rule 2/3 ! Check an actor showing something to ( this is the convert show to yourself to examine rule ): ! === equally specific with === ! Rule 3/3 ! Check an actor showing something to ( this is the block showing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor showing something to ( this is the can't show what you haven't got rule ): [ R_255 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_255, 255); ! [2: if the actor is not the holder of the noun] if (((~~((actor == (HolderOf(noun))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [aren't] holding [the noun].~ ( a )] say__p=1;! [5: ~[We] [aren't] holding [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_323); new_line; .L_Say305; .L_SayX305;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_255, 255, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor showing something to ( this is the convert show to yourself to examine rule ): [ R_256 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_256, 256); ! [2: if the actor is the second noun] if (((actor == second))) {! [3: convert to the examining action on the noun] return GVS_Convert(##Examine,noun,0); } } else if (debug_rules > 1) DB_Rule(R_256, 256, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor showing something to ( this is the block showing rule ): [ R_257 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_257, 257); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[The second noun] [are] unimpressed.~ ( a )] say__p=1;! [4: ~[The second noun] [are] unimpressed.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_324); new_line; .L_Say306; .L_SayX306;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_257, 257, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waking (B209_check_waking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor waking ( this is the block waking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor waking ( this is the block waking rule ): [ R_258 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_258, 258); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~That [seem] unnecessary.~ ( a )] say__p=1;! [5: ~That [seem] unnecessary.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_325); new_line; .L_Say307; .L_SayX307;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_258, 258, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Throwing it at (B212_check_throwing_it_at) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor throwing something at ( this is the implicitly remove thrown clothing rule ): ! === equally specific with === ! Rule 2/3 ! Check an actor throwing something at ( this is the futile to throw things at inanimate objects rule ): ! === equally specific with === ! Rule 3/3 ! Check an actor throwing something at ( this is the block throwing at rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor throwing something at ( this is the implicitly remove thrown clothing rule ): [ R_259 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_259, 259); ! [2: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [3: say ~(first taking [the noun] off)[command clarification break]~ ( a )] say__p=1;! [4: ~(first taking [the noun] off)[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_326); .L_Say308; .L_SayX308;! [5: silently try the actor trying taking off the noun] @push keep_silent; keep_silent=1; @push say__p; @push say__pc; ClearParagraphing(1); TryAction(0, actor, ##Disrobe, noun, 0); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; ! [6: if the actor is wearing the noun] if (((actor == WearerOf(noun)))) {! [7: stop the action] rtrue; } } } else if (debug_rules > 1) DB_Rule(R_259, 259, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor throwing something at ( this is the futile to throw things at inanimate objects rule ): [ R_260 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_260, 260); ! [2: if the second noun is not a person] if (((~~((second ofclass K8_person))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~Futile.~ ( a )] say__p=1;! [5: ~Futile.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_327); new_line; .L_Say309; .L_SayX309;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_260, 260, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor throwing something at ( this is the block throwing at rule ): [ R_261 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_261, 261); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[We] [lack] the nerve when it [if story tense is the past tense]came[otherwise]comes[end if] to the crucial moment.~ ( a )] say__p=1;! [4: ~[We] [lack] the nerve when it [if story tense is the past tense]came[otherwise]comes[end if] to the crucial moment.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_328); new_line; .L_Say310; .L_SayX310;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_261, 261, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Attacking (B215_check_attacking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor attacking ( this is the block attacking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor attacking ( this is the block attacking rule ): [ R_262 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_262, 262); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~Violence [aren't] the answer to this one.~ ( a )] say__p=1;! [5: ~Violence [aren't] the answer to this one.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_329); new_line; .L_Say311; .L_SayX311;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_262, 262, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Kissing (B218_check_kissing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor kissing ( this is the kissing yourself rule ): ! === equally specific with === ! Rule 2/2 ! Check an actor kissing ( this is the block kissing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor kissing ( this is the kissing yourself rule ): [ R_263 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_263, 263); ! [2: if the noun is the actor] if (((noun == actor))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [don't] get much from that.~ ( a )] say__p=1;! [5: ~[We] [don't] get much from that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_330); new_line; .L_Say312; .L_SayX312;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_263, 263, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor kissing ( this is the block kissing rule ): [ R_264 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_264, 264); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[The noun] [might not] like that.~ ( a )] say__p=1;! [4: ~[The noun] [might not] like that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_331); new_line; .L_Say313; .L_SayX313;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_264, 264, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Answering it that (B223_report_answering_it_tha) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor answering something that ( this is the block answering rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor answering something that ( this is the block answering rule ): [ R_265 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_265, 265); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~[There] [are] no reply.~ ( a )] say__p=1;! [5: ~[There] [are] no reply.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_332); new_line; .L_Say314; .L_SayX314;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_265, 265, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Telling it about (B224_check_telling_it_about) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor telling something about ( this is the telling yourself rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor telling something about ( this is the telling yourself rule ): [ R_266 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_266, 266); ! [2: if the actor is the noun] if (((actor == noun))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [talk] to [ourselves] a while.~ ( a )] say__p=1;! [5: ~[We] [talk] to [ourselves] a while.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_333); new_line; .L_Say315; .L_SayX315;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_266, 266, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Telling it about (B226_report_telling_it_about) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor telling something about ( this is the block telling rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor telling something about ( this is the block telling rule ): [ R_267 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_267, 267); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~This [provoke] no reaction.~ ( a )] say__p=1;! [5: ~This [provoke] no reaction.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_334); new_line; .L_Say316; .L_SayX316;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_267, 267, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Asking it about (B229_report_asking_it_about) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor asking something about ( this is the block asking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor asking something about ( this is the block asking rule ): [ R_268 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_268, 268); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~[There] [are] no reply.~ ( a )] say__p=1;! [5: ~[There] [are] no reply.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_335); new_line; .L_Say317; .L_SayX317;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_268, 268, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Asking it for (B230_check_asking_it_for) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Check an actor asking something for ( this is the asking yourself for something rule ): ! === equally specific with === ! Rule 2/2 ! Check an actor asking something for ( this is the translate asking for to giving rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor asking something for ( this is the asking yourself for something rule ): [ R_269 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_269, 269); ! [2: if the actor is the noun and the actor is the player] if ((((actor == noun))) && (((actor == player)))) {! [3: try taking inventory] TryAction(0, player, ##Inv, 0, 0); rtrue; } } else if (debug_rules > 1) DB_Rule(R_269, 269, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor asking something for ( this is the translate asking for to giving rule ): [ R_270 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_270, 270); ! [2: convert to request of the noun to perform giving it to action with the second noun and the actor] return ConvertToRequest(noun, ##Give, second, actor); } else if (debug_rules > 1) DB_Rule(R_270, 270, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Waiting (B235_report_waiting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor waiting ( this is the standard report waiting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor waiting ( this is the standard report waiting rule ): [ R_271 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_271, 271); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: now the prior named object is nothing] prior_named_noun = nothing; ! [5: say ~Time [pass].~ ( a )] say__p=1;! [6: ~Time [pass].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_336); new_line; .L_Say318; .L_SayX318;} } else { ! [7: say ~[The actor] [wait].~ ( b )] say__p=1;! [8: ~[The actor] [wait].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_337); new_line; .L_Say319; .L_SayX319;} } else if (debug_rules > 1) DB_Rule(R_271, 271, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Touching (B238_report_touching) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Report an actor touching ( this is the report touching yourself rule ): ! === equally specific with === ! Rule 2/3 ! Report an actor touching ( this is the report touching other people rule ): ! === equally specific with === ! Rule 3/3 ! Report an actor touching ( this is the report touching things rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor touching ( this is the report touching yourself rule ): [ R_272 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_272, 272); ! [2: if the noun is the actor] if (((noun == actor))) {! [3: if the actor is the player] if (((actor == player))) {! [4: if the action is not silent] if (((keep_silent == false))) {! [5: say ~[We] [achieve] nothing by this.~ ( a )] say__p=1;! [6: ~[We] [achieve] nothing by this.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_338); new_line; .L_Say320; .L_SayX320;} } else { ! [7: say ~[The actor] [touch] [themselves].~ ( b )] say__p=1;! [8: ~[The actor] [touch] [themselves].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_339); new_line; .L_Say321; .L_SayX321;} ! [9: stop the action] rtrue; } ! [10: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_272, 272, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor touching ( this is the report touching other people rule ): [ R_273 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_273, 273); ! [2: if the noun is a person] if (((noun ofclass K8_person))) {! [3: if the actor is the player] if (((actor == player))) {! [4: if the action is not silent] if (((keep_silent == false))) {! [5: say ~[The noun] [might not like] that.~ ( a )] say__p=1;! [6: ~[The noun] [might not like] that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_340); new_line; .L_Say322; .L_SayX322;} } else { ! [7: if the noun is the player] if (((noun == player))) {! [8: say ~[The actor] [touch] [us].~ ( b )] say__p=1;! [9: ~[The actor] [touch] [us].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_341); new_line; .L_Say323; .L_SayX323;} else { ! [10: say ~[The actor] [touch] [the noun].~ ( c )] say__p=1;! [11: ~[The actor] [touch] [the noun].~ ( c )] ParaContent(); print (TEXT_TY_Say) (TX_R_342); new_line; .L_Say324; .L_SayX324;} } ! [12: stop the action] rtrue; } ! [13: continue the action] rfalse; } else if (debug_rules > 1) DB_Rule(R_273, 273, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Report an actor touching ( this is the report touching things rule ): [ R_274 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_274, 274); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [feel] nothing unexpected.~ ( a )] say__p=1;! [5: ~[We] [feel] nothing unexpected.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_343); new_line; .L_Say325; .L_SayX325;} } else { ! [6: say ~[The actor] [touch] [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [touch] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_344); new_line; .L_Say326; .L_SayX326;} } else if (debug_rules > 1) DB_Rule(R_274, 274, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waving (B239_check_waving) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor waving ( this is the can't wave what's not held rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor waving ( this is the can't wave what's not held rule ): [ R_275 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_275, 275); ! [2: if the actor is not the holder of the noun] if (((~~((actor == (HolderOf(noun))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~But [we] [aren't] holding [regarding the noun][those].~ ( a )] say__p=1;! [5: ~But [we] [aren't] holding [regarding the noun][those].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_345); new_line; .L_Say327; .L_SayX327;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_275, 275, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Waving (B241_report_waving) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor waving ( this is the report waving things rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor waving ( this is the report waving things rule ): [ R_276 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_276, 276); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [wave] [the noun].~ ( a )] say__p=1;! [5: ~[We] [wave] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_346); new_line; .L_Say328; .L_SayX328;} } else { ! [6: say ~[The actor] [wave] [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [wave] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_347); new_line; .L_Say329; .L_SayX329;} } else if (debug_rules > 1) DB_Rule(R_276, 276, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Pulling (B242_check_pulling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor pulling ( this is the can't pull what's fixed in place rule ): ! === equally specific with === ! Rule 2/3 ! Check an actor pulling ( this is the can't pull scenery rule ): ! === equally specific with === ! Rule 3/3 ! Check an actor pulling ( this is the can't pull people rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor pulling ( this is the can't pull what's fixed in place rule ): [ R_277 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_277, 277); ! [2: if the noun is fixed in place] if ((((Adj_59_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They] [are] fixed in place.~ ( a )] say__p=1;! [5: ~[regarding the noun][They] [are] fixed in place.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_348); new_line; .L_Say330; .L_SayX330;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_277, 277, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pulling ( this is the can't pull scenery rule ): [ R_278 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_278, 278); ! [2: if the noun is scenery] if ((((Adj_61_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [are] unable to.~ ( a )] say__p=1;! [5: ~[We] [are] unable to.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_349); new_line; .L_Say331; .L_SayX331;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_278, 278, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pulling ( this is the can't pull people rule ): [ R_279 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_279, 279); ! [2: if the noun is a person] if (((noun ofclass K8_person))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [might not like] that.~ ( a )] say__p=1;! [5: ~[The noun] [might not like] that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_350); new_line; .L_Say332; .L_SayX332;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_279, 279, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Pulling (B244_report_pulling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor pulling ( this is the report pulling rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor pulling ( this is the report pulling rule ): [ R_280 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_280, 280); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: now the prior named object is nothing] prior_named_noun = nothing; ! [5: say ~Nothing obvious [happen].~ ( a )] say__p=1;! [6: ~Nothing obvious [happen].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_351); new_line; .L_Say333; .L_SayX333;} } else { ! [7: say ~[The actor] [pull] [the noun].~ ( b )] say__p=1;! [8: ~[The actor] [pull] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_352); new_line; .L_Say334; .L_SayX334;} } else if (debug_rules > 1) DB_Rule(R_280, 280, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Pushing (B245_check_pushing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/4 ! Check pushing the button: ! >>> III.3.2 - Action/What/Thing Acted On >>> ! Rule 2/4 ! Check an actor pushing something ( this is the can't push what's fixed in place rule ): ! === equally specific with === ! Rule 3/4 ! Check an actor pushing something ( this is the can't push scenery rule ): ! === equally specific with === ! Rule 4/4 ! Check an actor pushing something ( this is the can't push people rule ): ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Check pushing the button: [ R_870 ; if ((( (actor==player) && ((noun == I143_button) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_870, 870); ! [2: if the compartment holds a wide key and the player is not carrying a thin key] if ((((I144_velvet_compartment == HolderOf(I146_wide_key)))) && (((~~((player == CarrierOf(I131_thin_key))))))) {! [3: say ~The compartment firmly snaps shut, the machine whirrs for a moment, and then a thin key falls out of the slot and onto the floor. You stoop down and pick it up.~] say__p=1;! [4: ~The compartment firmly snaps shut, the machine whirrs for a moment, and then a thin key falls out of the slot and onto the floor. You stoop down and pick it up.~] ParaContent(); print "The compartment firmly snaps shut, the machine whirrs for a moment, and then a thin key falls out of the slot and onto the floor. You stoop down and pick it up."; new_line; .L_Say335; .L_SayX335;! [5: now the compartment is closed] (Adj_75_t2_v10(I144_velvet_compartment)); ! [6: now the player is carrying a thin key] MoveObject(I131_thin_key,player); ! [7: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_870, 870, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something ( this is the can't push what's fixed in place rule ): [ R_281 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_281, 281); ! [2: if the noun is fixed in place] if ((((Adj_59_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They] [are] fixed in place.~ ( a )] say__p=1;! [5: ~[regarding the noun][They] [are] fixed in place.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_353); new_line; .L_Say336; .L_SayX336;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_281, 281, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something ( this is the can't push scenery rule ): [ R_282 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_282, 282); ! [2: if the noun is scenery] if ((((Adj_61_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [are] unable to.~ ( a )] say__p=1;! [5: ~[We] [are] unable to.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_354); new_line; .L_Say337; .L_SayX337;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_282, 282, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something ( this is the can't push people rule ): [ R_283 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_283, 283); ! [2: if the noun is a person] if (((noun ofclass K8_person))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [might not like] that.~ ( a )] say__p=1;! [5: ~[The noun] [might not like] that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_355); new_line; .L_Say338; .L_SayX338;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_283, 283, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Pushing (B247_report_pushing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor pushing something ( this is the report pushing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor pushing something ( this is the report pushing rule ): [ R_284 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_284, 284); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: now the prior named object is nothing] prior_named_noun = nothing; ! [5: say ~Nothing obvious [happen].~ ( a )] say__p=1;! [6: ~Nothing obvious [happen].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_356); new_line; .L_Say339; .L_SayX339;} } else { ! [7: say ~[The actor] [push] [the noun].~ ( b )] say__p=1;! [8: ~[The actor] [push] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_357); new_line; .L_Say340; .L_SayX340;} } else if (debug_rules > 1) DB_Rule(R_284, 284, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Turning (B248_check_turning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/3 ! Check an actor turning ( this is the can't turn what's fixed in place rule ): ! === equally specific with === ! Rule 2/3 ! Check an actor turning ( this is the can't turn scenery rule ): ! === equally specific with === ! Rule 3/3 ! Check an actor turning ( this is the can't turn people rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor turning ( this is the can't turn what's fixed in place rule ): [ R_285 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_285, 285); ! [2: if the noun is fixed in place] if ((((Adj_59_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They] [are] fixed in place.~ ( a )] say__p=1;! [5: ~[regarding the noun][They] [are] fixed in place.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_358); new_line; .L_Say341; .L_SayX341;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_285, 285, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor turning ( this is the can't turn scenery rule ): [ R_286 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_286, 286); ! [2: if the noun is scenery] if ((((Adj_61_t1_v10(noun))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[We] [are] unable to.~ ( a )] say__p=1;! [5: ~[We] [are] unable to.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_359); new_line; .L_Say342; .L_SayX342;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_286, 286, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor turning ( this is the can't turn people rule ): [ R_287 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_287, 287); ! [2: if the noun is a person] if (((noun ofclass K8_person))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [might not like] that.~ ( a )] say__p=1;! [5: ~[The noun] [might not like] that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_360); new_line; .L_Say343; .L_SayX343;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_287, 287, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Turning (B250_report_turning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor turning ( this is the report turning rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor turning ( this is the report turning rule ): [ R_288 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_288, 288); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: now the prior named object is nothing] prior_named_noun = nothing; ! [5: say ~Nothing obvious [happen].~ ( a )] say__p=1;! [6: ~Nothing obvious [happen].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_361); new_line; .L_Say344; .L_SayX344;} } else { ! [7: say ~[The actor] [turn] [the noun].~ ( b )] say__p=1;! [8: ~[The actor] [turn] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_362); new_line; .L_Say345; .L_SayX345;} } else if (debug_rules > 1) DB_Rule(R_288, 288, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Pushing it to (B251_check_pushing_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/6 ! Check an actor pushing something to ( this is the can't push unpushable things rule ): ! === equally specific with === ! Rule 2/6 ! Check an actor pushing something to ( this is the can't push to non-directions rule ): ! === equally specific with === ! Rule 3/6 ! Check an actor pushing something to ( this is the can't push vertically rule ): ! === equally specific with === ! Rule 4/6 ! Check an actor pushing something to ( this is the can't push from within rule ): ! === equally specific with === ! Rule 5/6 ! Check an actor pushing something to ( this is the standard pushing in directions rule ): ! === equally specific with === ! Rule 6/6 ! Check an actor pushing something to ( this is the block pushing in directions rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor pushing something to ( this is the can't push unpushable things rule ): [ R_289 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_289, 289); ! [2: if the noun is not pushable between rooms] if (((~~(((Adj_63_t1_v10(noun))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [cannot] be pushed from place to place.~ ( a )] say__p=1;! [5: ~[The noun] [cannot] be pushed from place to place.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_363); new_line; .L_Say346; .L_SayX346;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_289, 289, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something to ( this is the can't push to non-directions rule ): [ R_290 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_290, 290); ! [2: if the second noun is not a direction] if (((~~((second ofclass K3_direction))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the noun][They] [aren't] a direction.~ ( a )] say__p=1;! [5: ~[regarding the noun][They] [aren't] a direction.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_364); new_line; .L_Say347; .L_SayX347;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_290, 290, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something to ( this is the can't push vertically rule ): [ R_291 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_291, 291); ! [2: if the second noun is up or the second noun is down] if ((((second == I59_up))) || (((second == I60_down)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [cannot] be pushed up or down.~ ( a )] say__p=1;! [5: ~[The noun] [cannot] be pushed up or down.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_365); new_line; .L_Say348; .L_SayX348;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_291, 291, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something to ( this is the can't push from within rule ): [ R_292 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_292, 292); ! [2: if the noun encloses the actor] if (((IndirectlyContains(noun,actor)))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [cannot] be pushed from here.~ ( a )] say__p=1;! [5: ~[The noun] [cannot] be pushed from here.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_366); new_line; .L_Say349; .L_SayX349;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_292, 292, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something to ( this is the standard pushing in directions rule ): [ R_293 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_293, 293); ! [2: convert to special going-with-push action] return ConvertToGoingWithPush(); } else if (debug_rules > 1) DB_Rule(R_293, 293, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor pushing something to ( this is the block pushing in directions rule ): [ R_294 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_294, 294); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[The noun] [cannot] be pushed from place to place.~ ( a )] say__p=1;! [4: ~[The noun] [cannot] be pushed from place to place.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_367); new_line; .L_Say350; .L_SayX350;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_294, 294, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Squeezing (B254_check_squeezing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor squeezing ( this is the innuendo about squeezing people rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor squeezing ( this is the innuendo about squeezing people rule ): [ R_295 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_295, 295); ! [2: if the noun is a person] if (((noun ofclass K8_person))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [might not like] that.~ ( a )] say__p=1;! [5: ~[The noun] [might not like] that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_368); new_line; .L_Say351; .L_SayX351;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_295, 295, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Squeezing (B256_report_squeezing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor squeezing ( this is the report squeezing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor squeezing ( this is the report squeezing rule ): [ R_296 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_296, 296); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [achieve] nothing by this.~ ( a )] say__p=1;! [5: ~[We] [achieve] nothing by this.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_369); new_line; .L_Say352; .L_SayX352;} } else { ! [6: say ~[The actor] [squeeze] [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [squeeze] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_370); new_line; .L_Say353; .L_SayX353;} } else if (debug_rules > 1) DB_Rule(R_296, 296, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Saying yes (B257_check_saying_yes) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor saying yes ( this is the block saying yes rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor saying yes ( this is the block saying yes rule ): [ R_297 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_297, 297); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~That was a rhetorical question.~ ( a )] say__p=1;! [4: ~That was a rhetorical question.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_371); new_line; .L_Say354; .L_SayX354;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_297, 297, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Saying no (B260_check_saying_no) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor saying no ( this is the block saying no rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor saying no ( this is the block saying no rule ): [ R_298 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_298, 298); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~That was a rhetorical question.~ ( a )] say__p=1;! [4: ~That was a rhetorical question.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_372); new_line; .L_Say355; .L_SayX355;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_298, 298, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Burning (B263_check_burning) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor burning ( this is the block burning rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor burning ( this is the block burning rule ): [ R_299 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_299, 299); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~This dangerous act [would achieve] little.~ ( a )] say__p=1;! [4: ~This dangerous act [would achieve] little.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_373); new_line; .L_Say356; .L_SayX356;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_299, 299, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Waking up (B266_check_waking_up) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor waking up ( this is the block waking up rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor waking up ( this is the block waking up rule ): [ R_300 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_300, 300); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~The dreadful truth [are], this [are not] a dream.~ ( a )] say__p=1;! [5: ~The dreadful truth [are], this [are not] a dream.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_374); new_line; .L_Say357; .L_SayX357;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_300, 300, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Thinking (B269_check_thinking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor thinking ( this is the block thinking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor thinking ( this is the block thinking rule ): [ R_301 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_301, 301); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~What a good idea.~ ( a )] say__p=1;! [4: ~What a good idea.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_375); new_line; .L_Say358; .L_SayX358;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_301, 301, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Smelling (B274_report_smelling) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor smelling ( this is the report smelling rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor smelling ( this is the report smelling rule ): [ R_302 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_302, 302); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [smell] nothing unexpected.~ ( a )] say__p=1;! [5: ~[We] [smell] nothing unexpected.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_376); new_line; .L_Say359; .L_SayX359;} } else { ! [6: say ~[The actor] [sniff].~ ( b )] say__p=1;! [7: ~[The actor] [sniff].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_377); new_line; .L_Say360; .L_SayX360;} } else if (debug_rules > 1) DB_Rule(R_302, 302, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Listening to (B277_report_listening_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor listening to ( this is the report listening rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor listening to ( this is the report listening rule ): [ R_303 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_303, 303); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [hear] nothing unexpected.~ ( a )] say__p=1;! [5: ~[We] [hear] nothing unexpected.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_378); new_line; .L_Say361; .L_SayX361;} } else { ! [6: say ~[The actor] [listen].~ ( b )] say__p=1;! [7: ~[The actor] [listen].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_379); new_line; .L_Say362; .L_SayX362;} } else if (debug_rules > 1) DB_Rule(R_303, 303, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Tasting (B280_report_tasting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor tasting ( this is the report tasting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor tasting ( this is the report tasting rule ): [ R_304 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_304, 304); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [taste] nothing unexpected.~ ( a )] say__p=1;! [5: ~[We] [taste] nothing unexpected.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_380); new_line; .L_Say363; .L_SayX363;} } else { ! [6: say ~[The actor] [taste] [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [taste] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_381); new_line; .L_Say364; .L_SayX364;} } else if (debug_rules > 1) DB_Rule(R_304, 304, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Cutting (B281_check_cutting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor cutting ( this is the block cutting rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor cutting ( this is the block cutting rule ): [ R_305 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_305, 305); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~Cutting [regarding the noun][them] up [would achieve] little.~ ( a )] say__p=1;! [4: ~Cutting [regarding the noun][them] up [would achieve] little.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_382); new_line; .L_Say365; .L_SayX365;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_305, 305, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Jumping (B286_report_jumping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor jumping ( this is the report jumping rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor jumping ( this is the report jumping rule ): [ R_306 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_306, 306); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [jump] on the spot.~ ( a )] say__p=1;! [5: ~[We] [jump] on the spot.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_383); new_line; .L_Say366; .L_SayX366;} } else { ! [6: say ~[The actor] [jump] on the spot.~ ( b )] say__p=1;! [7: ~[The actor] [jump] on the spot.~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_384); new_line; .L_Say367; .L_SayX367;} } else if (debug_rules > 1) DB_Rule(R_306, 306, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Tying it to (B287_check_tying_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor tying something to ( this is the block tying rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor tying something to ( this is the block tying rule ): [ R_307 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_307, 307); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[We] [would achieve] nothing by this.~ ( a )] say__p=1;! [4: ~[We] [would achieve] nothing by this.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_385); new_line; .L_Say368; .L_SayX368;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_307, 307, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Drinking (B290_check_drinking) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor drinking ( this is the block drinking rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor drinking ( this is the block drinking rule ): [ R_308 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_308, 308); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~[There's] nothing suitable to drink here.~ ( a )] say__p=1;! [5: ~[There's] nothing suitable to drink here.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_386); new_line; .L_Say369; .L_SayX369;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_308, 308, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Saying sorry (B293_check_saying_sorry) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor saying sorry ( this is the block saying sorry rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor saying sorry ( this is the block saying sorry rule ): [ R_309 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_309, 309); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~Oh, don't [if American dialect option is active]apologize[otherwise]apologise[end if].~ ( a )] say__p=1;! [4: ~Oh, don't [if American dialect option is active]apologize[otherwise]apologise[end if].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_387); new_line; .L_Say370; .L_SayX370;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_309, 309, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Swinging (B296_check_swinging) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor swinging ( this is the block swinging rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor swinging ( this is the block swinging rule ): [ R_310 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_310, 310); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~[There's] nothing sensible to swing here.~ ( a )] say__p=1;! [5: ~[There's] nothing sensible to swing here.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_388); new_line; .L_Say371; .L_SayX371;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_310, 310, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Rubbing (B299_check_rubbing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor rubbing ( this is the can't rub another person rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor rubbing ( this is the can't rub another person rule ): [ R_311 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_311, 311); ! [2: if the noun is a person who is not the actor] if (((noun ofclass K8_person) && (~~((noun == actor))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[The noun] [might not like] that.~ ( a )] say__p=1;! [5: ~[The noun] [might not like] that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_389); new_line; .L_Say372; .L_SayX372;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_311, 311, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Rubbing (B301_report_rubbing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor rubbing ( this is the report rubbing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor rubbing ( this is the report rubbing rule ): [ R_312 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_312, 312); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [rub] [the noun].~ ( a )] say__p=1;! [5: ~[We] [rub] [the noun].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_390); new_line; .L_Say373; .L_SayX373;} } else { ! [6: say ~[The actor] [rub] [the noun].~ ( b )] say__p=1;! [7: ~[The actor] [rub] [the noun].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_391); new_line; .L_Say374; .L_SayX374;} } else if (debug_rules > 1) DB_Rule(R_312, 312, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Setting it to (B302_check_setting_it_to) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor setting something to ( this is the block setting it to rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor setting something to ( this is the block setting it to rule ): [ R_313 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_313, 313); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~No, [we] [can't set] [regarding the noun][those] to anything.~ ( a )] say__p=1;! [4: ~No, [we] [can't set] [regarding the noun][those] to anything.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_392); new_line; .L_Say375; .L_SayX375;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_313, 313, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Waving hands (B307_report_waving_hands) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Report an actor waving hands ( this is the report waving hands rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Report an actor waving hands ( this is the report waving hands rule ): [ R_314 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_314, 314); ! [2: if the actor is the player] if (((actor == player))) {! [3: if the action is not silent] if (((keep_silent == false))) {! [4: say ~[We] [wave].~ ( a )] say__p=1;! [5: ~[We] [wave].~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_393); new_line; .L_Say376; .L_SayX376;} } else { ! [6: say ~[The actor] [wave].~ ( b )] say__p=1;! [7: ~[The actor] [wave].~ ( b )] ParaContent(); print (TEXT_TY_Say) (TX_R_394); new_line; .L_Say377; .L_SayX377;} } else if (debug_rules > 1) DB_Rule(R_314, 314, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Buying (B308_check_buying) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor buying ( this is the block buying rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor buying ( this is the block buying rule ): [ R_315 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_315, 315); ! [2: if the actor is the player] if (((actor == player))) {! [3: now the prior named object is nothing] prior_named_noun = nothing; ! [4: say ~Nothing [are] on sale.~ ( a )] say__p=1;! [5: ~Nothing [are] on sale.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_395); new_line; .L_Say378; .L_SayX378;} ! [6: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_315, 315, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Climbing (B311_check_climbing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor climbing ( this is the block climbing rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor climbing ( this is the block climbing rule ): [ R_316 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_316, 316); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~Little [are] to be achieved by that.~ ( a )] say__p=1;! [4: ~Little [are] to be achieved by that.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_396); new_line; .L_Say379; .L_SayX379;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_316, 316, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Sleeping (B314_check_sleeping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor sleeping ( this is the block sleeping rule ): ! ---------------------------------------------------------------------------------------------------- ! From the Standard Rules ! No specific request ! Check an actor sleeping ( this is the block sleeping rule ): [ R_317 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_317, 317); ! [2: if the actor is the player] if (((actor == player))) {! [3: say ~[We] [aren't] feeling especially drowsy.~ ( a )] say__p=1;! [4: ~[We] [aren't] feeling especially drowsy.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_397); new_line; .L_Say380; .L_SayX380;} ! [5: stop the action] rtrue; } else if (debug_rules > 1) DB_Rule(R_317, 317, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Pausing the game (B363_for_pausing_the_game) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! For pausing the game ( this is the standard pausing the game rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Basic Screen Effects" by Emily Short ! No specific request ! For pausing the game ( this is the standard pausing the game rule ): [ R_805 ; if (debug_rules) DB_Rule(R_805, 805); ! [2: say ~[paragraph break]Please press SPACE to continue.~ ( a )] say__p=1;! [3: ~[paragraph break]Please press SPACE to continue.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_398); new_line; .L_Say381; .L_SayX381;! [4: wait for the space key] SPACEPause(); ! [5: clear the screen] VM_ClearScreen(0); RulebookSucceeds(); rtrue; rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: for Refusing keys (B366_for_refusing_keys) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Rule for refusing keys of something ( called locked-thing ) ( this is the standard printing key lack rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Rule for refusing keys of something ( called locked-thing ) ( this is the standard printing key lack rule ): [ R_827 tmp_0 ! Let/loop value, e.g., 'locked-thing': thing ; if ((((tmp_0 = parameter_value, (((parameter_value ofclass K2_thing) && (tmp_0=(parameter_value), true))))) || (tmp_0 = 0,false))) { ! Runs only when pattern matches if (debug_rules) DB_Rule(R_827, 827); ! [2: say ~[We] [lack] a key that fits [the locked-thing].~ ( a )] say__p=1;! [3: ~[We] [lack] a key that fits [the locked-thing].~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_399); new_line; .L_Say382; .L_SayX382;RulebookSucceeds(); rtrue; } else if (debug_rules > 1) DB_Rule(R_827, 827, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Unlocking keylessly (B368_check_unlocking_keyless) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor unlocking keylessly ( this is the check keylessly unlocking rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Check an actor unlocking keylessly ( this is the check keylessly unlocking rule ): [ R_831 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_831, 831); ! [2: abide by the can't unlock without a lock rule] if (FollowRulebook(R_214)) rtrue; ! [3: abide by the can't unlock what's already unlocked rule] if (FollowRulebook(R_215)) rtrue; ! [4: abide by the need a matching key rule] if (FollowRulebook(R_825)) rtrue; ! [5: now the key unlocked with is the second noun] (MStack-->MstVO(20077,0)) = second; } else if (debug_rules > 1) DB_Rule(R_831, 831, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Unlocking keylessly (B369_carry_out_unlocking_key) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor unlocking keylessly ( this is the standard keylessly unlocking rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Carry out an actor unlocking keylessly ( this is the standard keylessly unlocking rule ): [ R_832 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_832, 832); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: do nothing] ; } else { ! [4: if the person asked is the player] if (((actor == player))) {! [5: say ~(with [the key unlocked with])[command clarification break]~ ( a )] say__p=1;! [6: ~(with [the key unlocked with])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_400); .L_Say383; .L_SayX383;} } ! [7: try the person asked unlocking the noun with the key unlocked with] TryAction(0, actor, ##Unlock, noun, (MStack-->MstVO(20077,0))); } else if (debug_rules > 1) DB_Rule(R_832, 832, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Locking keylessly (B371_check_locking_keylessly) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check an actor locking keylessly ( this is the check keylessly locking rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Check an actor locking keylessly ( this is the check keylessly locking rule ): [ R_834 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_834, 834); ! [2: abide by the can't lock without a lock rule] if (FollowRulebook(R_208)) rtrue; ! [3: abide by the can't lock what's already locked rule] if (FollowRulebook(R_209)) rtrue; ! [4: abide by the can't lock what's open rule] if (FollowRulebook(R_210)) rtrue; ! [5: abide by the need a matching key rule] if (FollowRulebook(R_825)) rtrue; ! [6: now the key locked with is the second noun] (MStack-->MstVO(20078,0)) = second; } else if (debug_rules > 1) DB_Rule(R_834, 834, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Locking keylessly (B372_carry_out_locking_keyle) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out an actor locking keylessly ( this is the standard keylessly locking rule ): ! ---------------------------------------------------------------------------------------------------- ! From "Locksmith" by Emily Short ! No specific request ! Carry out an actor locking keylessly ( this is the standard keylessly locking rule ): [ R_835 ; if ((((act_requester==nothing)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_835, 835); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: do nothing] ; } else { ! [4: if the person asked is the player] if (((actor == player))) {! [5: say ~(with [the key locked with])[command clarification break]~ ( a )] say__p=1;! [6: ~(with [the key locked with])[command clarification break]~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_401); .L_Say384; .L_SayX384;} } ! [7: try the person asked locking the noun with the key locked with] TryAction(0, actor, ##Lock, noun, (MStack-->MstVO(20078,0))); } else if (debug_rules > 1) DB_Rule(R_835, 835, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: report Typing (B381_report_typing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/2 ! Report typing number less than 1000: ! >>> I - Number of aspects constrained >>> ! Rule 2/2 ! Report typing: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Report typing number less than 1000: [ R_871 ; if ((( (actor==player) && ((true) && (parsed_number < 1000))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_871, 871); ! [2: if the keypad is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I147_electronic_keypad)))) {! [3: say ~Enter the whole code at once, please.~] say__p=1;! [4: ~Enter the whole code at once, please.~] ParaContent(); print "Enter the whole code at once, please."; new_line; .L_Say385; .L_SayX385;! [5: stop the action] rtrue; } else { ! [6: say ~There's nothing to type on.~] say__p=1;! [7: ~There's nothing to type on.~] ParaContent(); print "There's nothing to type on."; new_line; .L_Say386; .L_SayX386;! [8: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_871, 871, 'action'); rfalse; ]; ! No specific request ! Report typing: [ R_872 ; if (actor == player) { if (debug_rules) DB_Rule(R_872, 872); ! [2: if the keypad is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I147_electronic_keypad)))) {! [3: if the beige door is locked] if ((((Adj_79_t1_v10(I130_beige_door))))) {! [4: say ~The keypad beeps unhappily at you twice, and clears the screen. Guessing randomly is probably not going to work here.~] say__p=1;! [5: ~The keypad beeps unhappily at you twice, and clears the screen. Guessing randomly is probably not going to work here.~] ParaContent(); print "The keypad beeps unhappily at you twice, and clears the screen. Guessing randomly is probably not going to work here."; new_line; .L_Say387; .L_SayX387;} else { ! [6: say ~Why are you still typing into the keypad? The door's unlocked already!~] say__p=1;! [7: ~Why are you still typing into the keypad? The door's unlocked already!~] ParaContent(); print "Why are you still typing into the keypad? The door's unlocked already!"; new_line; .L_Say388; .L_SayX388;} } else { ! [8: say ~There's nothing to type on.~] say__p=1;! [9: ~There's nothing to type on.~] ParaContent(); print "There's nothing to type on."; new_line; .L_Say389; .L_SayX389;} } else if (debug_rules > 1) DB_Rule(R_872, 872, 'actor'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: check Unscrewing (B382_check_unscrewing) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Check unscrewing the wooden box: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Check unscrewing the wooden box: [ R_884 tmp_0 ! Let/loop value (deallocated by end of phrase) ; if ((( (actor==player) && ((noun == I164_wooden_box) && (true))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_884, 884); ! [2: if screwed is less than 3] if ((((Global_Vars-->20) < 3))) {! [3: increase screwed by 1] (Global_Vars-->20) = (Global_Vars-->20) + 1;; ! [4: say ~You unscrew a screw from the lid.~] say__p=1;! [5: ~You unscrew a screw from the lid.~] ParaContent(); print "You unscrew a screw from the lid."; new_line; .L_Say390; .L_SayX390;! [6: stop the action] rtrue; } ! [7: if screwed is 3] if ((((Global_Vars-->20) == 3))) {! [8: now the wooden box is open] (Adj_74_t2_v10(I164_wooden_box)); ! [9: if the strange machine is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I142_strange_machine)))) {! [10: now the wide key is in the wooden box] MoveObject(I146_wide_key,I164_wooden_box); } ! [11: if the electronic keypad is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I147_electronic_keypad)))) {! [12: now a printed slip is in the wooden box] MoveObject(I148_printed_slip,I164_wooden_box); } ! [13: if the block of ice is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I153_block_of_ice)))) {! [14: now an orange berry is in the wooden box] MoveObject(I157_orange_berry,I164_wooden_box); } ! [15: if the pair of lights is in the mysterious room] if (((I128_mysterious_room == ContainerOf(I149_pair_of_lights)))) {! [16: now a thin key is in the wooden box] MoveObject(I131_thin_key,I164_wooden_box); } ! [17: increase screwed by 1] (Global_Vars-->20) = (Global_Vars-->20) + 1;; ! [18: say ~You unscrew the last screw, remove the lid, and reveal the [list of things in the wooden box] within.[paragraph break]And in the process, your screwdriver has completely dulled. You toss it aside.~] say__p=1;! [19: ~You unscrew the last screw, remove the lid, and reveal the ~] ParaContent(); print "You unscrew the last screw, remove the lid, and reveal the ";! [20: list of things in the wooden box] ParaContent(); objectloop(tmp_0 ofclass Object) if (((tmp_0 ofclass K2_thing) && (I164_wooden_box == ContainerOf(tmp_0)))) give tmp_0 workflag2; else give tmp_0 ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT+NOARTICLE_BIT);! [21: ~ within.~] ParaContent(); print " within.";! [22: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [23: ~And in the process, your screwdriver has completely dulled. You toss it aside.~] ParaContent(); print "And in the process, your screwdriver has completely dulled. You toss it aside."; new_line; .L_Say391; .L_SayX391;! [24: now the screwdriver is nowhere] RemoveFromPlay(I165_screwdriver);; ! [25: stop the action] rtrue; } ! [26: if screwed is greater than 3] if ((((Global_Vars-->20) > 3))) {! [27: say ~No need to mess with the screws anymore now that the box is open.~] say__p=1;! [28: ~No need to mess with the screws anymore now that the box is open.~] ParaContent(); print "No need to mess with the screws anymore now that the box is open."; new_line; .L_Say392; .L_SayX392;! [29: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_884, 884, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: when Discovery begins (B385_when_discovery_begins) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! When Discovery begins: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! When Discovery begins: [ R_887 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value (deallocated by end of phrase) ; if (debug_rules) DB_Rule(R_887, 887); ! [2: repeat with item running through things had by the player] for (tmp_0=Prop_34(0), tmp_1=Prop_34(tmp_0): tmp_0: tmp_0=tmp_1, tmp_1=Prop_34(tmp_1)) {! [3: move the item to the mysterious room] MoveObject(tmp_0, I128_mysterious_room, 0, false); } rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Helping (B388_carry_out_helping) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/1 ! Carry out helping: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Carry out helping: [ R_912 ; if (actor == player) { if (debug_rules) DB_Rule(R_912, 912); ! [2: if the player is in the mysterious room] if (((I128_mysterious_room == ContainerOf(player)))) {! [3: say ~Hi! I'm Earth Traveler, and welcome to my first work of IF, The Game That Never Ends![paragraph break]This is a rather bizarre work of IF, starring the featureless amnesiac protagonist being run through an endless gauntlet of puzzle rooms. On second thought, that isn't really that bizarre, except for the fact that the series of rooms is truly endless, and the puzzles aren't particularly challenging - except for possibly that one with the lights.[paragraph break]In spite of the title, this game does have an ending, but you might have to think outside the box to find it. If you feel stuck, type HINT to display one of a list of hints.[paragraph break]Thank you for playing![paragraph break]If you have any questions about the game or any bugs you would like to report, feel free to email me at earthtraveler413@@64outlook.com.~] say__p=1;! [4: ~Hi! I'm Earth Traveler, and welcome to my first work of IF, The Game That Never Ends!~] ParaContent(); print "Hi! I'm Earth Traveler, and welcome to my first work of IF, The Game That Never Ends!";! [5: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [6: ~This is a rather bizarre work of IF, starring the featureless amnesiac protagonist being run through an endless gauntlet of puzzle rooms. On second thought, that isn't really that bizarre, except for the fact that the series of rooms is truly endless, and the puzzles aren't particularly challenging - except for possibly that one with the lights.~] ParaContent(); print "This is a rather bizarre work of IF, starring the featureless amnesiac protagonist being run through an endless gauntlet of puzzle rooms. On second thought, that isn't really that bizarre, except for the fact that the series of rooms is truly endless, and the puzzles aren't particularly challenging - except for possibly that one with the lights.";! [7: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [8: ~In spite of the title, this game does have an ending, but you might have to think outside the box to find it. If you feel stuck, type HINT to display one of a list of hints.~] ParaContent(); print "In spite of the title, this game does have an ending, but you might have to think outside the box to find it. If you feel stuck, type HINT to display one of a list of hints.";! [9: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [10: ~Thank you for playing!~] ParaContent(); print "Thank you for playing!";! [11: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [12: ~If you have any questions about the game or any bugs you would like to report, feel free to email me at earthtraveler413@@64outlook.com.~] ParaContent(); print "If you have any questions about the game or any bugs you would like to report, feel free to email me at earthtraveler413@@64outlook.com."; new_line; .L_Say393; .L_SayX393;} else { ! [13: say ~Hi! I'm Earth Traveler, and welcome to my first work of IF, The Game That Never Ends![paragraph break]This is a rather bizarre work of IF, starring the featureless amnesiac protagonist being run through an endless gauntlet of rooms. Or not, as it looks like you've figured out the game's twist. Nothing left to do but run through the final sequence of actions now. Thanks for playing![paragraph break]If you have any questions about the game or any bugs you would like to report, feel free to email me at earthtraveler413@@64outlook.com.~] say__p=1;! [14: ~Hi! I'm Earth Traveler, and welcome to my first work of IF, The Game That Never Ends!~] ParaContent(); print "Hi! I'm Earth Traveler, and welcome to my first work of IF, The Game That Never Ends!";! [15: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [16: ~This is a rather bizarre work of IF, starring the featureless amnesiac protagonist being run through an endless gauntlet of rooms. Or not, as it looks like you've figured out the game's twist. Nothing left to do but run through the final sequence of actions now. Thanks for playing!~] ParaContent(); print "This is a rather bizarre work of IF, starring the featureless amnesiac protagonist being run through an endless gauntlet of rooms. Or not, as it looks like you've figured out the game's twist. Nothing left to do but run through the final sequence of actions now. Thanks for playing!";! [17: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [18: ~If you have any questions about the game or any bugs you would like to report, feel free to email me at earthtraveler413@@64outlook.com.~] ParaContent(); print "If you have any questions about the game or any bugs you would like to report, feel free to email me at earthtraveler413@@64outlook.com."; new_line; .L_Say394; .L_SayX394;} } else if (debug_rules > 1) DB_Rule(R_912, 912, 'actor'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! ---------------------------------------------------------------------------------------------------- ! Rules in rulebook: carry out Hinting (B391_carry_out_hinting) ! ---------------------------------------------------------------------------------------------------- ! Rule 1/7 ! Carry out hinting for the first time: ! === equally specific with === ! Rule 2/7 ! Carry out hinting for the second time: ! === equally specific with === ! Rule 3/7 ! Carry out hinting for the third time: ! === equally specific with === ! Rule 4/7 ! Carry out hinting for the fourth time: ! === equally specific with === ! Rule 5/7 ! Carry out hinting for the fifth time: ! === equally specific with === ! Rule 6/7 ! Carry out hinting for the sixth time: ! === equally specific with === ! Rule 7/7 ! Carry out hinting for the seventh time: ! ---------------------------------------------------------------------------------------------------- ! No specific request ! Carry out hinting for the first time: [ R_913 ; if ((PAPR_1() && (((TimesActionHasHappened-->1) == 1) && (ActionCurrentlyHappeningFlag->1)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_913, 913); ! [2: say ~Hi! Welcome to the hint system for The Game That Never Ends![paragraph break]First hint: Have you looked at the halogen lamp yet? Look at it. Then look at it again.~] say__p=1;! [3: ~Hi! Welcome to the hint system for The Game That Never Ends!~] ParaContent(); print "Hi! Welcome to the hint system for The Game That Never Ends!";! [4: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [5: ~First hint: Have you looked at the halogen lamp yet? Look at it. Then look at it again.~] ParaContent(); print "First hint: Have you looked at the halogen lamp yet? Look at it. Then look at it again."; new_line; .L_Say395; .L_SayX395;} else if (debug_rules > 1) DB_Rule(R_913, 913, 'action'); rfalse; ]; ! No specific request ! Carry out hinting for the second time: [ R_914 ; if ((PAPR_2() && (((TimesActionHasHappened-->2) == 2) && (ActionCurrentlyHappeningFlag->2)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_914, 914); ! [2: say ~Second hint: Weird, huh? Well, whatever, you have bigger problems right now. Solve the puzzle in the room and go through the door.[if a pair of lights is in the Mysterious Room][paragraph break]By the way, if the pair of lights is giving you trouble, the sequence is:[paragraph break]R, R, R, L, L, L, R, R, R, or SOS.~] say__p=1;! [3: ~Second hint: Weird, huh? Well, whatever, you have bigger problems right now. Solve the puzzle in the room and go through the door.~] ParaContent(); print "Second hint: Weird, huh? Well, whatever, you have bigger problems right now. Solve the puzzle in the room and go through the door."; new_line;! [4: if a pair of lights is in the mysterious room] ParaContent(); if (~~((((I128_mysterious_room == ContainerOf(I149_pair_of_lights)))))) jump L_Say396;! [5: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [6: ~By the way, if the pair of lights is giving you trouble, the sequence is:~] ParaContent(); print "By the way, if the pair of lights is giving you trouble, the sequence is:";! [7: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [8: ~R, R, R, L, L, L, R, R, R, or SOS.~] ParaContent(); print "R, R, R, L, L, L, R, R, R, or SOS."; new_line; .L_Say396; .L_SayX396;} else if (debug_rules > 1) DB_Rule(R_914, 914, 'action'); rfalse; ]; ! No specific request ! Carry out hinting for the third time: [ R_915 ; if ((PAPR_3() && (((TimesActionHasHappened-->3) == 3) && (ActionCurrentlyHappeningFlag->3)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_915, 915); ! [2: say ~Third hint: Now that you've gone through the door, you're in another puzzle room. Rats. Go back the way you came.~] say__p=1;! [3: ~Third hint: Now that you've gone through the door, you're in another puzzle room. Rats. Go back the way you came.~] ParaContent(); print "Third hint: Now that you've gone through the door, you're in another puzzle room. Rats. Go back the way you came."; new_line; .L_Say397; .L_SayX397;} else if (debug_rules > 1) DB_Rule(R_915, 915, 'action'); rfalse; ]; ! No specific request ! Carry out hinting for the fourth time: [ R_916 ; if ((PAPR_4() && (((TimesActionHasHappened-->4) == 4) && (ActionCurrentlyHappeningFlag->4)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_916, 916); ! [2: say ~Fourth hint: Oops. The door going back has disappeared. Weird. Don't look at the next hint until you've found one of notes laying around.~] say__p=1;! [3: ~Fourth hint: Oops. The door going back has disappeared. Weird. Don't look at the next hint until you've found one of notes laying around.~] ParaContent(); print "Fourth hint: Oops. The door going back has disappeared. Weird. Don't look at the next hint until you've found one of notes laying around."; new_line; .L_Say398; .L_SayX398;} else if (debug_rules > 1) DB_Rule(R_916, 916, 'action'); rfalse; ]; ! No specific request ! Carry out hinting for the fifth time: [ R_917 ; if ((PAPR_5() && (((TimesActionHasHappened-->5) == 5) && (ActionCurrentlyHappeningFlag->5)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_917, 917); ! [2: say ~Fifth hint: So, you've found one of the notes and, presumably, read it, and found some weird nonsequiter. Perhaps it will make more sense once you've found more of them.~] say__p=1;! [3: ~Fifth hint: So, you've found one of the notes and, presumably, read it, and found some weird nonsequiter. Perhaps it will make more sense once you've found more of them.~] ParaContent(); print "Fifth hint: So, you've found one of the notes and, presumably, read it, and found some weird nonsequiter. Perhaps it will make more sense once you've found more of them."; new_line; .L_Say399; .L_SayX399;} else if (debug_rules > 1) DB_Rule(R_917, 917, 'action'); rfalse; ]; ! No specific request ! Carry out hinting for the sixth time: [ R_918 ; if ((PAPR_6() && (((TimesActionHasHappened-->6) == 6) && (ActionCurrentlyHappeningFlag->6)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_918, 918); ! [2: say ~Sixth hint: You should've now found a few of the notes scattered across the rooms. Sure are weird, huh? Have you noticed any themes they seem to have in common? Maybe that could give you an idea of how to end the game.~] say__p=1;! [3: ~Sixth hint: You should've now found a few of the notes scattered across the rooms. Sure are weird, huh? Have you noticed any themes they seem to have in common? Maybe that could give you an idea of how to end the game.~] ParaContent(); print "Sixth hint: You should've now found a few of the notes scattered across the rooms. Sure are weird, huh? Have you noticed any themes they seem to have in common? Maybe that could give you an idea of how to end the game."; new_line; .L_Say400; .L_SayX400;} else if (debug_rules > 1) DB_Rule(R_918, 918, 'action'); rfalse; ]; ! No specific request ! Carry out hinting for the seventh time: [ R_919 ; if ((PAPR_7() && (((TimesActionHasHappened-->7) == 7) && (ActionCurrentlyHappeningFlag->7)))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_919, 919); ! [2: say ~Seventh hint: The themes the notes share seem to have to do with walls and touching.~] say__p=1;! [3: ~Seventh hint: The themes the notes share seem to have to do with walls and touching.~] ParaContent(); print "Seventh hint: The themes the notes share seem to have to do with walls and touching."; new_line; .L_Say401; .L_SayX401;} else if (debug_rules > 1) DB_Rule(R_919, 919, 'action'); rfalse; ]; ! ---------------------------------------------------------------------------------------------------- ! Definitions of displaced and unbooked rules ! From the Standard Rules ! No specific request ! Check an actor locking something with ( this is the can't lock without the correct key rule ): [ R_211 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_211, 211); ! [2: if the holder of the second noun is not the actor or the noun does not provide the property matching key or the matching key of the noun is not the second noun] if ((((~~(((HolderOf(second)) == actor))))) || ((((~~((WhetherProvides(noun, false, with_key)))))) || (((~~((GProperty(OBJECT_TY, noun,with_key) == second))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the second noun][Those] [don't] seem to fit the lock.~ ( a )] say__p=1;! [5: ~[regarding the second noun][Those] [don't] seem to fit the lock.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_402); new_line; .L_Say402; .L_SayX402;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_211, 211, 'action'); rfalse; ]; ! From the Standard Rules ! No specific request ! Check an actor unlocking something with ( this is the can't unlock without the correct key rule ): [ R_216 ; if ((((act_requester==nothing) && ((noun ofclass K2_thing))))) { ! Runs only when pattern matches self = noun; if (debug_rules) DB_Rule(R_216, 216); ! [2: if the holder of the second noun is not the actor or the noun does not provide the property matching key or the matching key of the noun is not the second noun] if ((((~~(((HolderOf(second)) == actor))))) || ((((~~((WhetherProvides(noun, false, with_key)))))) || (((~~((GProperty(OBJECT_TY, noun,with_key) == second))))))) {! [3: if the actor is the player] if (((actor == player))) {! [4: say ~[regarding the second noun][Those] [don't] seem to fit the lock.~ ( a )] say__p=1;! [5: ~[regarding the second noun][Those] [don't] seem to fit the lock.~ ( a )] ParaContent(); print (TEXT_TY_Say) (TX_R_403); new_line; .L_Say403; .L_SayX403;} ! [6: stop the action] rtrue; } } else if (debug_rules > 1) DB_Rule(R_216, 216, 'action'); rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the need a matching key rule: [ R_825 tmp_0 ! Let/loop value, e.g., 'item': passkey ; if (debug_rules) DB_Rule(R_825, 825); ! [2: if the person asked encloses something ( called item ) which unlocks the noun] if ((((RGuard_f0_1(noun)) ofclass K2_thing) && (tmp_0=((RGuard_f0_1(noun))), true) && (IndirectlyContains(actor,(RGuard_f0_1(noun)))))) {! [3: now the second noun is the item] second = tmp_0; ! [4: abide by the must have accessible the second noun rule] if (FollowRulebook(R_851)) rtrue; } else { ! [5: if a visible passkey ( called item ) unbolts the noun] if ((((RGuard_f0_2(noun)) ofclass K16_passkey) && ((Adj_3_t1_v10((RGuard_f0_2(noun))))) && (tmp_0=((RGuard_f0_2(noun))), true))) {! [6: now the second noun is the item] second = tmp_0; ! [7: abide by the must have accessible the second noun rule] if (FollowRulebook(R_851)) rtrue; } else { ! [8: if the player is the person asked] if (((player == actor))) {! [9: say ~[key-refusal for noun]~] say__p=1;! [10: key-refusal for noun] ParaContent(); (PHR_826_r2 (noun)); .L_Say404; .L_SayX404;} ! [11: stop the action] rtrue; } } rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the noun autotaking rule: [ R_846 ; if (debug_rules) DB_Rule(R_846, 846); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: if the player is the person asked] if (((player == actor))) {! [4: try taking the noun] TryAction(0, player, ##Take, noun, 0); } else { ! [5: try the person asked trying taking the noun] TryAction(0, actor, ##Take, noun, 0); } } else { ! [6: carry out the implicitly taking activity with the noun] CarryOutActivity(V25_implicitly_taking, noun); } rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the second noun autotaking rule: [ R_847 ; if (debug_rules) DB_Rule(R_847, 847); ! [2: if sequential action option is active] if ((((Adj_25_t1_v16(28))))) {! [3: if the player is the person asked] if (((player == actor))) {! [4: try taking the second noun] TryAction(0, player, ##Take, second, 0); } else { ! [5: try the person asked trying taking the second noun] TryAction(0, actor, ##Take, second, 0); } } else { ! [6: carry out the implicitly taking activity with the second noun] CarryOutActivity(V25_implicitly_taking, second); } rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the must hold the noun rule: [ R_848 ; if (debug_rules) DB_Rule(R_848, 848); ! [2: if the person asked does not have the noun] if (((~~((actor == OwnerOf(noun)))))) {! [3: follow the noun autotaking rule] FollowRulebook(R_846); } ! [4: if the person asked does not have the noun] if (((~~((actor == OwnerOf(noun)))))) {! [5: stop the action] rtrue; } ! [6: make no decision] rfalse; rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the must hold the second noun rule: [ R_849 ; if (debug_rules) DB_Rule(R_849, 849); ! [2: if the person asked does not have the second noun] if (((~~((actor == OwnerOf(second)))))) {! [3: follow the second noun autotaking rule] FollowRulebook(R_847); } ! [4: if the person asked does not have the second noun] if (((~~((actor == OwnerOf(second)))))) {! [5: stop the action] rtrue; } ! [6: make no decision] rfalse; rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the must have accessible the noun rule: [ R_850 tmp_0 ! Let/loop value, e.g., 'containing keychain': keychain ; if (debug_rules) DB_Rule(R_850, 850); ! [2: if the noun is not key-accessible] if (((~~(((Adj_42_t1_v10(noun))))))) {! [3: if the noun is on a keychain ( called the containing keychain )] if (((SupporterOf(noun) ofclass K17_keychain) && (tmp_0=(SupporterOf(noun)), true))) {! [4: now the noun is the containing keychain] noun = tmp_0; } ! [5: follow the noun autotaking rule] FollowRulebook(R_846); } ! [6: if the noun is not key-accessible] if (((~~(((Adj_42_t1_v10(noun))))))) {! [7: if the player is the person asked] if (((player == actor))) {! [8: say ~Without holding [the noun], [we] [can] do nothing.~ ( a )] say__p=1;! [9: ~Without holding [the noun], [we] [can] do nothing.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),TX_R_404); new_line; .L_Say405; .L_SayX405;} ! [10: stop the action] rtrue; } ! [11: make no decision] rfalse; rfalse; ]; ! From "Locksmith" by Emily Short ! No specific request ! This is the must have accessible the second noun rule: [ R_851 tmp_0 ! Let/loop value (deallocated by end of phrase) tmp_1 ! Let/loop value, e.g., 'containing keychain': keychain ; if (debug_rules) DB_Rule(R_851, 851); ! [2: if the second noun is not key-accessible] if (((~~(((Adj_42_t1_v10(second))))))) {! [3: let the held second noun be the second noun] tmp_0 = second; ! [4: if the second noun is on a keychain ( called the containing keychain )] if (((SupporterOf(second) ofclass K17_keychain) && (tmp_1=(SupporterOf(second)), true))) {! [5: now the second noun is the containing keychain] second = tmp_1; } ! [6: follow the second noun autotaking rule] FollowRulebook(R_847); ! [7: now the second noun is the held second noun] second = tmp_0; } ! [8: if the second noun is not key-accessible] if (((~~(((Adj_42_t1_v10(second))))))) {! [9: if the player is the person asked] if (((player == actor))) {! [10: say ~Without holding [the second noun], [we] [can] do nothing.~ ( a )] say__p=1;! [11: ~Without holding [the second noun], [we] [can] do nothing.~ ( a )] ParaContent(); print (TEXT_TY_Say) ((LocalParking-->0=tmp_0),(LocalParking-->1=tmp_1),TX_R_405); new_line; .L_Say406; .L_SayX406;} ! [12: stop the action] rtrue; } ! [13: make no decision] rfalse; rfalse; ]; ! Definitions of adjectives ! From the Standard Rules ! No specific request ! Definition: [ R_0 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_1 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_2 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_3 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_4 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_5 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_6 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_7 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_8 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_39 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_40 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_41 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_42 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_43 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_44 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_45 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_46 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_47 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_48 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_49 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_50 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_51 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_52 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_53 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_54 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_55 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_56 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_57 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_58 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_59 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_60 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_61 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_62 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_63 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_64 t_0 ! Call parameter: object ; return false; ]; ! From the Standard Rules ! No specific request ! Definition: [ R_95 t_0 ! Call parameter: object ; return false; ]; ! From "Locksmith" by Emily Short ! No specific request ! Definition: [ R_828 t_0 ! Call parameter: object ; ! [2: if the person asked carries it] if (((actor == CarrierOf(t_0)))) {! [3: yes] rtrue; } ! [4: if it is on a keychain which is carried by the person asked] if (((SupporterOf(t_0) ofclass K17_keychain) && (actor == CarrierOf(SupporterOf(t_0))))) {! [5: yes] rtrue; } ! [6: no] rfalse; return false; ]; ! From "Locksmith" by Emily Short ! No specific request ! Definition: [ R_836 t_0 ! Call parameter: object ; return false; ]; [ Adj_0_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "worn" if (t_0 ofclass K2_thing) return ((((player == WearerOf(t_0))))); rfalse; ]; [ Adj_1_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "carried" if (t_0 ofclass K2_thing) return ((((player == CarrierOf(t_0))))); rfalse; ]; [ Adj_2_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "held" if (t_0 ofclass K2_thing) return ((((player == HolderOf(t_0))))); rfalse; ]; [ Adj_3_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "visible" if (t_0 ofclass K2_thing) return ((((TestVisibility(player,t_0))))); rfalse; ]; [ Adj_4_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "invisible" if (t_0 ofclass K2_thing) return (~~(((((TestVisibility(player,t_0))))))); rfalse; ]; [ Adj_5_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "touchable" if (t_0 ofclass K2_thing) return ((((TestTouchability(player,t_0))))); rfalse; ]; [ Adj_6_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "untouchable" if (t_0 ofclass K2_thing) return (~~(((((TestTouchability(player,t_0))))))); rfalse; ]; [ Adj_7_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "concealed" if (t_0 ofclass K2_thing) return ((((TestConcealment((HolderOf(t_0)),t_0))))); rfalse; ]; [ Adj_8_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "unconcealed" if (t_0 ofclass K2_thing) return (~~(((((TestConcealment((HolderOf(t_0)),t_0))))))); rfalse; ]; [ Adj_9_t1_v10 t_0 ! Call parameter: number ; ! meaning of "on-stage" if (t_0 ofclass K2_thing) return ((OnStage(t_0, -1))); rfalse; ]; [ Adj_10_t1_v10 t_0 ! Call parameter: number ; ! meaning of "off-stage" if (t_0 ofclass K2_thing) return (~~(((OnStage(t_0, -1))))); rfalse; ]; [ Adj_11_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "offstage" if (t_0 ofclass K2_thing) return (((((~~Adj_9_t1_v10(t_0)))))); rfalse; ]; [ Adj_12_t1_v10 t_0 ! Call parameter: room ; ! meaning of "adjacent" if (t_0 ofclass K1_room) return ((((TestAdjacency(real_location,t_0))))); rfalse; ]; [ Adj_13_t1_v11 t_0 ! Call parameter: number ; ! meaning of "even" return (((((IntegerRemainder(t_0, 2)) == 0)))); rfalse; ]; [ Adj_14_t1_v11 t_0 ! Call parameter: number ; ! meaning of "odd" return (~~((((((IntegerRemainder(t_0, 2)) == 0)))))); rfalse; ]; [ Adj_15_t1_v11 t_0 ! Call parameter: number ; ! meaning of "positive" return ((((t_0 > 0)))); rfalse; ]; [ Adj_15_t1_v12 t_0 ! Call parameter: real number ; ! meaning of "positive" return ((((REAL_NUMBER_TY_Compare(t_0, NUMBER_TY_to_REAL_NUMBER_TY(0)) > 0)))); rfalse; ]; [ Adj_16_t1_v11 t_0 ! Call parameter: number ; ! meaning of "negative" return ((((t_0 < 0)))); rfalse; ]; [ Adj_16_t1_v12 t_0 ! Call parameter: real number ; ! meaning of "negative" return ((((REAL_NUMBER_TY_Compare(t_0, NUMBER_TY_to_REAL_NUMBER_TY(0)) < 0)))); rfalse; ]; [ Adj_17_t1_v14 t_0 ! Call parameter: number ; ! meaning of "empty" return ((TEXT_TY_Empty(t_0))); rfalse; ]; [ Adj_17_t1_v20 t_0 ! Call parameter: table name ; ! meaning of "empty" return ((((TableFilledRows(t_0) == 0)))); rfalse; ]; [ Adj_17_t1_v32 t_0 ! Call parameter: number ; ! meaning of "empty" return ((RulebookEmpty(t_0))); rfalse; ]; [ Adj_17_t1_v33 t_0 ! Call parameter: number ; ! meaning of "empty" return ((ActivityEmpty(t_0))); rfalse; ]; [ Adj_17_t1_v34 t_0 ! Call parameter: number ; ! meaning of "empty" return ((LIST_OF_TY_Empty(t_0))); rfalse; ]; [ Adj_17_t1_v30 t_0 ! Call parameter: number ; ! meaning of "empty" return ((RELATION_TY_Empty(t_0, -1))); rfalse; ]; [ Adj_18_t1_v14 t_0 ! Call parameter: number ; ! meaning of "non-empty" return (~~(((TEXT_TY_Empty(t_0))))); rfalse; ]; [ Adj_18_t1_v20 t_0 ! Call parameter: table name ; ! meaning of "non-empty" return (~~(((((TableFilledRows(t_0) == 0)))))); rfalse; ]; [ Adj_18_t1_v32 t_0 ! Call parameter: number ; ! meaning of "non-empty" return (~~(((RulebookEmpty(t_0))))); rfalse; ]; [ Adj_18_t1_v33 t_0 ! Call parameter: number ; ! meaning of "non-empty" return (~~(((ActivityEmpty(t_0))))); rfalse; ]; [ Adj_18_t1_v34 t_0 ! Call parameter: number ; ! meaning of "non-empty" return (~~(((LIST_OF_TY_Empty(t_0))))); rfalse; ]; [ Adj_18_t1_v30 t_0 ! Call parameter: number ; ! meaning of "non-empty" return (~~(((RELATION_TY_Empty(t_0, -1))))); rfalse; ]; [ Adj_19_t1_v14 t_0 ! Call parameter: number ; ! meaning of "substituted" return ((TEXT_TY_IsSubstituted(t_0))); rfalse; ]; [ Adj_20_t1_v14 t_0 ! Call parameter: number ; ! meaning of "unsubstituted" return (~~(((TEXT_TY_IsSubstituted(t_0))))); rfalse; ]; [ Adj_21_t1_v43 t_0 ! Call parameter: scene ; ! meaning of "happening" return ((scene_status-->(t_0-1)==1)); rfalse; ]; [ Adj_22_t1_v20 t_0 ! Call parameter: table name ; ! meaning of "full" return ((((TableBlankRows(t_0) == 0)))); rfalse; ]; [ Adj_23_t1_v20 t_0 ! Call parameter: table name ; ! meaning of "non-full" return (~~(((((TableBlankRows(t_0) == 0)))))); rfalse; ]; [ Adj_24_t1_v33 t_0 ! Call parameter: number ; ! meaning of "going on" return ((TestActivity(t_0))); rfalse; ]; [ Adj_25_t1_v16 t_0 ! Call parameter: number ; ! meaning of "active" return ((TestUseOption(t_0))); rfalse; ]; [ Adj_26_t1_v16 t_0 ! Call parameter: number ; ! meaning of "inactive" return (~~(((TestUseOption(t_0))))); rfalse; ]; [ Adj_27_t1_v30 t_0 ! Call parameter: number ; ! meaning of "equivalence" return ((RELATION_TY_EquivalenceAdjective(t_0, -1))); rfalse; ]; [ Adj_28_t1_v30 t_0 ! Call parameter: number ; ! meaning of "symmetric" return ((RELATION_TY_SymmetricAdjective(t_0, -1))); rfalse; ]; [ Adj_29_t1_v30 t_0 ! Call parameter: number ; ! meaning of "one-to-one" return ((RELATION_TY_OToOAdjective(t_0, -1))); rfalse; ]; [ Adj_30_t1_v30 t_0 ! Call parameter: number ; ! meaning of "one-to-various" return ((RELATION_TY_OToVAdjective(t_0, -1))); rfalse; ]; [ Adj_31_t1_v30 t_0 ! Call parameter: number ; ! meaning of "various-to-one" return ((RELATION_TY_VToOAdjective(t_0, -1))); rfalse; ]; [ Adj_32_t1_v30 t_0 ! Call parameter: number ; ! meaning of "various-to-various" return ((RELATION_TY_VToVAdjective(t_0, -1))); rfalse; ]; [ Adj_33_t1_v18 t_0 ! Call parameter: number ; ! meaning of "modal" return ((VerbIsModal(t_0))); rfalse; ]; [ Adj_34_t1_v18 t_0 ! Call parameter: number ; ! meaning of "non-modal" return (~~(((VerbIsModal(t_0))))); rfalse; ]; [ Adj_35_t1_v18 t_0 ! Call parameter: number ; ! meaning of "meaningful" return ((VerbIsMeaningful(t_0))); rfalse; ]; [ Adj_36_t1_v18 t_0 ! Call parameter: number ; ! meaning of "meaningless" return (~~(((VerbIsMeaningful(t_0))))); rfalse; ]; [ Adj_37_t1_v12 t_0 ! Call parameter: real number ; ! meaning of "infinite" return ((((( REAL_NUMBER_TY_Compare(t_0, 2139095040) == 0))) || ((( REAL_NUMBER_TY_Compare(t_0, -8388608) == 0))))); rfalse; ]; [ Adj_38_t1_v12 t_0 ! Call parameter: real number ; ! meaning of "finite" return (~~(((((( REAL_NUMBER_TY_Compare(t_0, 2139095040) == 0))) || ((( REAL_NUMBER_TY_Compare(t_0, -8388608) == 0))))))); rfalse; ]; [ Adj_39_t1_v12 t_0 ! Call parameter: number ; ! meaning of "nonexistent" return ((REAL_NUMBER_TY_Nan(t_0))); rfalse; ]; [ Adj_40_t1_v12 t_0 ! Call parameter: number ; ! meaning of "existent" return (~~(((REAL_NUMBER_TY_Nan(t_0))))); rfalse; ]; [ Adj_41_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "locale-supportable" if (t_0 ofclass K2_thing) return (((((~~(((Adj_61_t1_v10(t_0))))))) && ((((~~(((Adj_69_t1_v10(t_0))))))) && (((~~(((Adj_66_t1_v10(t_0)))))))))); rfalse; ]; [ Adj_42_t1_v10 t_0 ! Call parameter: thing ; ! meaning of "key-accessible" if (t_0 ofclass K2_thing) return ((R_828(t_0))); rfalse; ]; [ Adj_43_t1_v10 t_0 ! Call parameter: passkey ; ! meaning of "identified" if (t_0 ofclass K16_passkey) return (((((Prop_35(t_0)))))); rfalse; ]; [ Adj_44_t1_v10 t_0 ! Call parameter: object ; ! meaning of "plural-named" if (t_0) return (GetEitherOrProperty(t_0, pluralname)); rfalse; ]; [ Adj_45_t1_v10 t_0 ! Call parameter: object ; ! meaning of "singular-named" if (t_0) return (GetEitherOrProperty(t_0, pluralname) == false); rfalse; ]; [ Adj_46_t1_v10 t_0 ! Call parameter: object ; ! meaning of "proper-named" if (t_0) return (GetEitherOrProperty(t_0, proper)); rfalse; ]; [ Adj_47_t1_v10 t_0 ! Call parameter: object ; ! meaning of "improper-named" if (t_0) return (GetEitherOrProperty(t_0, proper) == false); rfalse; ]; [ Adj_48_t1_v10 t_0 ! Call parameter: object ; ! meaning of "ambiguously plural" if (t_0) return (GetEitherOrProperty(t_0, ambigpluralname)); rfalse; ]; [ Adj_49_t1_v10 t_0 ! Call parameter: object ; ! meaning of "privately-named" if (t_0) return (GetEitherOrProperty(t_0, privately_named)); rfalse; ]; [ Adj_50_t1_v10 t_0 ! Call parameter: object ; ! meaning of "publicly-named" if (t_0) return (GetEitherOrProperty(t_0, privately_named) == false); rfalse; ]; [ Adj_51_t1_v10 t_0 ! Call parameter: object ; ! meaning of "lighted" if (t_0) return (GetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_52_t1_v10 t_0 ! Call parameter: object ; ! meaning of "dark" if (t_0) return (GetEitherOrProperty(t_0, light) == false); rfalse; ]; [ Adj_53_t1_v10 t_0 ! Call parameter: object ; ! meaning of "visited" if (t_0) return (GetEitherOrProperty(t_0, visited)); rfalse; ]; [ Adj_54_t1_v10 t_0 ! Call parameter: object ; ! meaning of "unvisited" if (t_0) return (GetEitherOrProperty(t_0, visited) == false); rfalse; ]; [ Adj_55_t1_v10 t_0 ! Call parameter: object ; ! meaning of "lit" if (t_0) return (GetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_56_t1_v10 t_0 ! Call parameter: object ; ! meaning of "unlit" if (t_0) return (GetEitherOrProperty(t_0, light) == false); rfalse; ]; [ Adj_57_t1_v10 t_0 ! Call parameter: object ; ! meaning of "edible" if (t_0) return (GetEitherOrProperty(t_0, edible)); rfalse; ]; [ Adj_58_t1_v10 t_0 ! Call parameter: object ; ! meaning of "inedible" if (t_0) return (GetEitherOrProperty(t_0, edible) == false); rfalse; ]; [ Adj_59_t1_v10 t_0 ! Call parameter: object ; ! meaning of "fixed in place" if (t_0) return (GetEitherOrProperty(t_0, static)); rfalse; ]; [ Adj_60_t1_v10 t_0 ! Call parameter: object ; ! meaning of "portable" if (t_0) return (GetEitherOrProperty(t_0, static) == false); rfalse; ]; [ Adj_61_t1_v10 t_0 ! Call parameter: object ; ! meaning of "scenery" if (t_0) return (GetEitherOrProperty(t_0, scenery)); rfalse; ]; [ Adj_62_t1_v10 t_0 ! Call parameter: object ; ! meaning of "wearable" if (t_0) return (GetEitherOrProperty(t_0, clothing)); rfalse; ]; [ Adj_63_t1_v10 t_0 ! Call parameter: object ; ! meaning of "pushable between rooms" if (t_0) return (GetEitherOrProperty(t_0, pushable)); rfalse; ]; [ Adj_64_t1_v10 t_0 ! Call parameter: object ; ! meaning of "handled" if (t_0) return (GetEitherOrProperty(t_0, moved)); rfalse; ]; [ Adj_65_t1_v10 t_0 ! Call parameter: object ; ! meaning of "described" if (t_0) return (GetEitherOrProperty(t_0, concealed) == false); rfalse; ]; [ Adj_66_t1_v10 t_0 ! Call parameter: object ; ! meaning of "undescribed" if (t_0) return (GetEitherOrProperty(t_0, concealed)); rfalse; ]; [ Adj_67_t1_v10 t_0 ! Call parameter: object ; ! meaning of "marked for listing" if (t_0) return (GetEitherOrProperty(t_0, workflag)); rfalse; ]; [ Adj_68_t1_v10 t_0 ! Call parameter: object ; ! meaning of "unmarked for listing" if (t_0) return (GetEitherOrProperty(t_0, workflag) == false); rfalse; ]; [ Adj_69_t1_v10 t_0 ! Call parameter: object ; ! meaning of "mentioned" if (t_0) return (GetEitherOrProperty(t_0, mentioned)); rfalse; ]; [ Adj_70_t1_v10 t_0 ! Call parameter: object ; ! meaning of "unmentioned" if (t_0) return (GetEitherOrProperty(t_0, mentioned) == false); rfalse; ]; [ Adj_71_t1_v10 t_0 ! Call parameter: object ; ! meaning of "enterable" if (t_0) return (GetEitherOrProperty(t_0, enterable)); rfalse; ]; [ Adj_72_t1_v10 t_0 ! Call parameter: object ; ! meaning of "opaque" if (t_0) return (GetEitherOrProperty(t_0, transparent) == false); rfalse; ]; [ Adj_73_t1_v10 t_0 ! Call parameter: object ; ! meaning of "transparent" if (t_0) return (GetEitherOrProperty(t_0, transparent)); rfalse; ]; [ Adj_74_t1_v10 t_0 ! Call parameter: object ; ! meaning of "open" if (t_0) return (GetEitherOrProperty(t_0, open)); rfalse; ]; [ Adj_75_t1_v10 t_0 ! Call parameter: object ; ! meaning of "closed" if (t_0) return (GetEitherOrProperty(t_0, open) == false); rfalse; ]; [ Adj_76_t1_v10 t_0 ! Call parameter: object ; ! meaning of "openable" if (t_0) return (GetEitherOrProperty(t_0, openable)); rfalse; ]; [ Adj_77_t1_v10 t_0 ! Call parameter: object ; ! meaning of "unopenable" if (t_0) return (GetEitherOrProperty(t_0, openable) == false); rfalse; ]; [ Adj_78_t1_v10 t_0 ! Call parameter: object ; ! meaning of "lockable" if (t_0) return (GetEitherOrProperty(t_0, lockable)); rfalse; ]; [ Adj_79_t1_v10 t_0 ! Call parameter: object ; ! meaning of "locked" if (t_0) return (GetEitherOrProperty(t_0, locked)); rfalse; ]; [ Adj_80_t1_v10 t_0 ! Call parameter: object ; ! meaning of "unlocked" if (t_0) return (GetEitherOrProperty(t_0, locked) == false); rfalse; ]; [ Adj_81_t1_v10 t_0 ! Call parameter: object ; ! meaning of "female" if (t_0) return (GetEitherOrProperty(t_0, female)); rfalse; ]; [ Adj_82_t1_v10 t_0 ! Call parameter: object ; ! meaning of "male" if (t_0) return (GetEitherOrProperty(t_0, female) == false); rfalse; ]; [ Adj_83_t1_v10 t_0 ! Call parameter: object ; ! meaning of "neuter" if (t_0) return (GetEitherOrProperty(t_0, neuter)); rfalse; ]; [ Adj_84_t1_v10 t_0 ! Call parameter: object ; ! meaning of "switched on" if (t_0) return (GetEitherOrProperty(t_0, on)); rfalse; ]; [ Adj_85_t1_v10 t_0 ! Call parameter: object ; ! meaning of "switched off" if (t_0) return (GetEitherOrProperty(t_0, on) == false); rfalse; ]; [ Adj_86_t1_v43 t_0 ! Call parameter: scene ; ! meaning of "recurring" return (GProperty(SCENE_TY, t_0, p57_recurring)); rfalse; ]; [ Adj_87_t1_v43 t_0 ! Call parameter: scene ; ! meaning of "non-recurring" return (GProperty(SCENE_TY, t_0, p57_recurring) == false); rfalse; ]; [ Adj_88_t1_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (GetEitherOrProperty(t_0, absent)); rfalse; ]; [ Adj_89_t1_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (GetEitherOrProperty(t_0, mark_as_room)); rfalse; ]; [ Adj_90_t1_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (GetEitherOrProperty(t_0, mark_as_thing)); rfalse; ]; [ Adj_9_t2_v10 t_0 ! Call parameter: number ; ! meaning of "on-stage" if (t_0 ofclass K2_thing) return ((OnStage(t_0, true))); rfalse; ]; [ Adj_10_t2_v10 t_0 ! Call parameter: number ; ! meaning of "off-stage" if (t_0 ofclass K2_thing) return ((OnStage(t_0, false))); rfalse; ]; [ Adj_17_t2_v30 t_0 ! Call parameter: number ; ! meaning of "empty" return ((RELATION_TY_Empty(t_0, true))); rfalse; ]; [ Adj_18_t2_v30 t_0 ! Call parameter: number ; ! meaning of "non-empty" return ((RELATION_TY_Empty(t_0, false))); rfalse; ]; [ Adj_27_t2_v30 t_0 ! Call parameter: number ; ! meaning of "equivalence" return ((RELATION_TY_EquivalenceAdjective(t_0, true))); rfalse; ]; [ Adj_28_t2_v30 t_0 ! Call parameter: number ; ! meaning of "symmetric" return ((RELATION_TY_SymmetricAdjective(t_0, true))); rfalse; ]; [ Adj_29_t2_v30 t_0 ! Call parameter: number ; ! meaning of "one-to-one" return ((RELATION_TY_OToOAdjective(t_0, true))); rfalse; ]; [ Adj_30_t2_v30 t_0 ! Call parameter: number ; ! meaning of "one-to-various" return ((RELATION_TY_OToVAdjective(t_0, true))); rfalse; ]; [ Adj_31_t2_v30 t_0 ! Call parameter: number ; ! meaning of "various-to-one" return ((RELATION_TY_VToOAdjective(t_0, true))); rfalse; ]; [ Adj_32_t2_v30 t_0 ! Call parameter: number ; ! meaning of "various-to-various" return ((RELATION_TY_VToVAdjective(t_0, true))); rfalse; ]; [ Adj_44_t2_v10 t_0 ! Call parameter: object ; ! meaning of "plural-named" if (t_0) return (SetEitherOrProperty(t_0, pluralname)); rfalse; ]; [ Adj_45_t2_v10 t_0 ! Call parameter: object ; ! meaning of "singular-named" if (t_0) return (SetEitherOrProperty(t_0, pluralname, true)); rfalse; ]; [ Adj_46_t2_v10 t_0 ! Call parameter: object ; ! meaning of "proper-named" if (t_0) return (SetEitherOrProperty(t_0, proper)); rfalse; ]; [ Adj_47_t2_v10 t_0 ! Call parameter: object ; ! meaning of "improper-named" if (t_0) return (SetEitherOrProperty(t_0, proper, true)); rfalse; ]; [ Adj_48_t2_v10 t_0 ! Call parameter: object ; ! meaning of "ambiguously plural" if (t_0) return (SetEitherOrProperty(t_0, ambigpluralname)); rfalse; ]; [ Adj_49_t2_v10 t_0 ! Call parameter: object ; ! meaning of "privately-named" if (t_0) return (SetEitherOrProperty(t_0, privately_named)); rfalse; ]; [ Adj_50_t2_v10 t_0 ! Call parameter: object ; ! meaning of "publicly-named" if (t_0) return (SetEitherOrProperty(t_0, privately_named, true)); rfalse; ]; [ Adj_51_t2_v10 t_0 ! Call parameter: object ; ! meaning of "lighted" if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_52_t2_v10 t_0 ! Call parameter: object ; ! meaning of "dark" if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_53_t2_v10 t_0 ! Call parameter: object ; ! meaning of "visited" if (t_0) return (SetEitherOrProperty(t_0, visited)); rfalse; ]; [ Adj_54_t2_v10 t_0 ! Call parameter: object ; ! meaning of "unvisited" if (t_0) return (SetEitherOrProperty(t_0, visited, true)); rfalse; ]; [ Adj_55_t2_v10 t_0 ! Call parameter: object ; ! meaning of "lit" if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_56_t2_v10 t_0 ! Call parameter: object ; ! meaning of "unlit" if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_57_t2_v10 t_0 ! Call parameter: object ; ! meaning of "edible" if (t_0) return (SetEitherOrProperty(t_0, edible)); rfalse; ]; [ Adj_58_t2_v10 t_0 ! Call parameter: object ; ! meaning of "inedible" if (t_0) return (SetEitherOrProperty(t_0, edible, true)); rfalse; ]; [ Adj_59_t2_v10 t_0 ! Call parameter: object ; ! meaning of "fixed in place" if (t_0) return (SetEitherOrProperty(t_0, static)); rfalse; ]; [ Adj_60_t2_v10 t_0 ! Call parameter: object ; ! meaning of "portable" if (t_0) return (SetEitherOrProperty(t_0, static, true)); rfalse; ]; [ Adj_61_t2_v10 t_0 ! Call parameter: object ; ! meaning of "scenery" if (t_0) return (SetEitherOrProperty(t_0, scenery)); rfalse; ]; [ Adj_62_t2_v10 t_0 ! Call parameter: object ; ! meaning of "wearable" if (t_0) return (SetEitherOrProperty(t_0, clothing)); rfalse; ]; [ Adj_63_t2_v10 t_0 ! Call parameter: object ; ! meaning of "pushable between rooms" if (t_0) return (SetEitherOrProperty(t_0, pushable)); rfalse; ]; [ Adj_64_t2_v10 t_0 ! Call parameter: object ; ! meaning of "handled" if (t_0) return (SetEitherOrProperty(t_0, moved)); rfalse; ]; [ Adj_65_t2_v10 t_0 ! Call parameter: object ; ! meaning of "described" if (t_0) return (SetEitherOrProperty(t_0, concealed, true)); rfalse; ]; [ Adj_66_t2_v10 t_0 ! Call parameter: object ; ! meaning of "undescribed" if (t_0) return (SetEitherOrProperty(t_0, concealed)); rfalse; ]; [ Adj_67_t2_v10 t_0 ! Call parameter: object ; ! meaning of "marked for listing" if (t_0) return (SetEitherOrProperty(t_0, workflag)); rfalse; ]; [ Adj_68_t2_v10 t_0 ! Call parameter: object ; ! meaning of "unmarked for listing" if (t_0) return (SetEitherOrProperty(t_0, workflag, true)); rfalse; ]; [ Adj_69_t2_v10 t_0 ! Call parameter: object ; ! meaning of "mentioned" if (t_0) return (SetEitherOrProperty(t_0, mentioned)); rfalse; ]; [ Adj_70_t2_v10 t_0 ! Call parameter: object ; ! meaning of "unmentioned" if (t_0) return (SetEitherOrProperty(t_0, mentioned, true)); rfalse; ]; [ Adj_71_t2_v10 t_0 ! Call parameter: object ; ! meaning of "enterable" if (t_0) return (SetEitherOrProperty(t_0, enterable)); rfalse; ]; [ Adj_72_t2_v10 t_0 ! Call parameter: object ; ! meaning of "opaque" if (t_0) return (SetEitherOrProperty(t_0, transparent, true)); rfalse; ]; [ Adj_73_t2_v10 t_0 ! Call parameter: object ; ! meaning of "transparent" if (t_0) return (SetEitherOrProperty(t_0, transparent)); rfalse; ]; [ Adj_74_t2_v10 t_0 ! Call parameter: object ; ! meaning of "open" if (t_0) return (SetEitherOrProperty(t_0, open)); rfalse; ]; [ Adj_75_t2_v10 t_0 ! Call parameter: object ; ! meaning of "closed" if (t_0) return (SetEitherOrProperty(t_0, open, true)); rfalse; ]; [ Adj_76_t2_v10 t_0 ! Call parameter: object ; ! meaning of "openable" if (t_0) return (SetEitherOrProperty(t_0, openable)); rfalse; ]; [ Adj_77_t2_v10 t_0 ! Call parameter: object ; ! meaning of "unopenable" if (t_0) return (SetEitherOrProperty(t_0, openable, true)); rfalse; ]; [ Adj_78_t2_v10 t_0 ! Call parameter: object ; ! meaning of "lockable" if (t_0) return (SetEitherOrProperty(t_0, lockable)); rfalse; ]; [ Adj_79_t2_v10 t_0 ! Call parameter: object ; ! meaning of "locked" if (t_0) return (SetEitherOrProperty(t_0, locked)); rfalse; ]; [ Adj_80_t2_v10 t_0 ! Call parameter: object ; ! meaning of "unlocked" if (t_0) return (SetEitherOrProperty(t_0, locked, true)); rfalse; ]; [ Adj_81_t2_v10 t_0 ! Call parameter: object ; ! meaning of "female" if (t_0) return (SetEitherOrProperty(t_0, female)); rfalse; ]; [ Adj_82_t2_v10 t_0 ! Call parameter: object ; ! meaning of "male" if (t_0) return (SetEitherOrProperty(t_0, female, true)); rfalse; ]; [ Adj_83_t2_v10 t_0 ! Call parameter: object ; ! meaning of "neuter" if (t_0) return (SetEitherOrProperty(t_0, neuter)); rfalse; ]; [ Adj_84_t2_v10 t_0 ! Call parameter: object ; ! meaning of "switched on" if (t_0) return (SetEitherOrProperty(t_0, on)); rfalse; ]; [ Adj_85_t2_v10 t_0 ! Call parameter: object ; ! meaning of "switched off" if (t_0) return (SetEitherOrProperty(t_0, on, true)); rfalse; ]; [ Adj_86_t2_v43 t_0 ! Call parameter: scene ; ! meaning of "recurring" return (WriteGProperty(SCENE_TY, t_0, p57_recurring, true)); rfalse; ]; [ Adj_87_t2_v43 t_0 ! Call parameter: scene ; ! meaning of "non-recurring" return (WriteGProperty(SCENE_TY, t_0, p57_recurring)); rfalse; ]; [ Adj_88_t2_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (SetEitherOrProperty(t_0, absent)); rfalse; ]; [ Adj_89_t2_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (SetEitherOrProperty(t_0, mark_as_room)); rfalse; ]; [ Adj_90_t2_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (SetEitherOrProperty(t_0, mark_as_thing)); rfalse; ]; [ Adj_9_t3_v10 t_0 ! Call parameter: number ; ! meaning of "on-stage" if (t_0 ofclass K2_thing) return ((OnStage(t_0, false))); rfalse; ]; [ Adj_10_t3_v10 t_0 ! Call parameter: number ; ! meaning of "off-stage" if (t_0 ofclass K2_thing) return ((OnStage(t_0, true))); rfalse; ]; [ Adj_17_t3_v30 t_0 ! Call parameter: number ; ! meaning of "empty" return ((RELATION_TY_Empty(t_0, false))); rfalse; ]; [ Adj_18_t3_v30 t_0 ! Call parameter: number ; ! meaning of "non-empty" return ((RELATION_TY_Empty(t_0, true))); rfalse; ]; [ Adj_27_t3_v30 t_0 ! Call parameter: number ; ! meaning of "equivalence" return ((RELATION_TY_EquivalenceAdjective(t_0, false))); rfalse; ]; [ Adj_28_t3_v30 t_0 ! Call parameter: number ; ! meaning of "symmetric" return ((RELATION_TY_SymmetricAdjective(t_0, false))); rfalse; ]; [ Adj_29_t3_v30 t_0 ! Call parameter: number ; ! meaning of "one-to-one" return ((RELATION_TY_OToOAdjective(t_0, false))); rfalse; ]; [ Adj_30_t3_v30 t_0 ! Call parameter: number ; ! meaning of "one-to-various" return ((RELATION_TY_OToVAdjective(t_0, false))); rfalse; ]; [ Adj_31_t3_v30 t_0 ! Call parameter: number ; ! meaning of "various-to-one" return ((RELATION_TY_VToOAdjective(t_0, false))); rfalse; ]; [ Adj_32_t3_v30 t_0 ! Call parameter: number ; ! meaning of "various-to-various" return ((RELATION_TY_VToVAdjective(t_0, false))); rfalse; ]; [ Adj_44_t3_v10 t_0 ! Call parameter: object ; ! meaning of "plural-named" if (t_0) return (SetEitherOrProperty(t_0, pluralname, true)); rfalse; ]; [ Adj_45_t3_v10 t_0 ! Call parameter: object ; ! meaning of "singular-named" if (t_0) return (SetEitherOrProperty(t_0, pluralname)); rfalse; ]; [ Adj_46_t3_v10 t_0 ! Call parameter: object ; ! meaning of "proper-named" if (t_0) return (SetEitherOrProperty(t_0, proper, true)); rfalse; ]; [ Adj_47_t3_v10 t_0 ! Call parameter: object ; ! meaning of "improper-named" if (t_0) return (SetEitherOrProperty(t_0, proper)); rfalse; ]; [ Adj_48_t3_v10 t_0 ! Call parameter: object ; ! meaning of "ambiguously plural" if (t_0) return (SetEitherOrProperty(t_0, ambigpluralname, true)); rfalse; ]; [ Adj_49_t3_v10 t_0 ! Call parameter: object ; ! meaning of "privately-named" if (t_0) return (SetEitherOrProperty(t_0, privately_named, true)); rfalse; ]; [ Adj_50_t3_v10 t_0 ! Call parameter: object ; ! meaning of "publicly-named" if (t_0) return (SetEitherOrProperty(t_0, privately_named)); rfalse; ]; [ Adj_51_t3_v10 t_0 ! Call parameter: object ; ! meaning of "lighted" if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_52_t3_v10 t_0 ! Call parameter: object ; ! meaning of "dark" if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_53_t3_v10 t_0 ! Call parameter: object ; ! meaning of "visited" if (t_0) return (SetEitherOrProperty(t_0, visited, true)); rfalse; ]; [ Adj_54_t3_v10 t_0 ! Call parameter: object ; ! meaning of "unvisited" if (t_0) return (SetEitherOrProperty(t_0, visited)); rfalse; ]; [ Adj_55_t3_v10 t_0 ! Call parameter: object ; ! meaning of "lit" if (t_0) return (SetEitherOrProperty(t_0, light, true)); rfalse; ]; [ Adj_56_t3_v10 t_0 ! Call parameter: object ; ! meaning of "unlit" if (t_0) return (SetEitherOrProperty(t_0, light)); rfalse; ]; [ Adj_57_t3_v10 t_0 ! Call parameter: object ; ! meaning of "edible" if (t_0) return (SetEitherOrProperty(t_0, edible, true)); rfalse; ]; [ Adj_58_t3_v10 t_0 ! Call parameter: object ; ! meaning of "inedible" if (t_0) return (SetEitherOrProperty(t_0, edible)); rfalse; ]; [ Adj_59_t3_v10 t_0 ! Call parameter: object ; ! meaning of "fixed in place" if (t_0) return (SetEitherOrProperty(t_0, static, true)); rfalse; ]; [ Adj_60_t3_v10 t_0 ! Call parameter: object ; ! meaning of "portable" if (t_0) return (SetEitherOrProperty(t_0, static)); rfalse; ]; [ Adj_61_t3_v10 t_0 ! Call parameter: object ; ! meaning of "scenery" if (t_0) return (SetEitherOrProperty(t_0, scenery, true)); rfalse; ]; [ Adj_62_t3_v10 t_0 ! Call parameter: object ; ! meaning of "wearable" if (t_0) return (SetEitherOrProperty(t_0, clothing, true)); rfalse; ]; [ Adj_63_t3_v10 t_0 ! Call parameter: object ; ! meaning of "pushable between rooms" if (t_0) return (SetEitherOrProperty(t_0, pushable, true)); rfalse; ]; [ Adj_64_t3_v10 t_0 ! Call parameter: object ; ! meaning of "handled" if (t_0) return (SetEitherOrProperty(t_0, moved, true)); rfalse; ]; [ Adj_65_t3_v10 t_0 ! Call parameter: object ; ! meaning of "described" if (t_0) return (SetEitherOrProperty(t_0, concealed)); rfalse; ]; [ Adj_66_t3_v10 t_0 ! Call parameter: object ; ! meaning of "undescribed" if (t_0) return (SetEitherOrProperty(t_0, concealed, true)); rfalse; ]; [ Adj_67_t3_v10 t_0 ! Call parameter: object ; ! meaning of "marked for listing" if (t_0) return (SetEitherOrProperty(t_0, workflag, true)); rfalse; ]; [ Adj_68_t3_v10 t_0 ! Call parameter: object ; ! meaning of "unmarked for listing" if (t_0) return (SetEitherOrProperty(t_0, workflag)); rfalse; ]; [ Adj_69_t3_v10 t_0 ! Call parameter: object ; ! meaning of "mentioned" if (t_0) return (SetEitherOrProperty(t_0, mentioned, true)); rfalse; ]; [ Adj_70_t3_v10 t_0 ! Call parameter: object ; ! meaning of "unmentioned" if (t_0) return (SetEitherOrProperty(t_0, mentioned)); rfalse; ]; [ Adj_71_t3_v10 t_0 ! Call parameter: object ; ! meaning of "enterable" if (t_0) return (SetEitherOrProperty(t_0, enterable, true)); rfalse; ]; [ Adj_72_t3_v10 t_0 ! Call parameter: object ; ! meaning of "opaque" if (t_0) return (SetEitherOrProperty(t_0, transparent)); rfalse; ]; [ Adj_73_t3_v10 t_0 ! Call parameter: object ; ! meaning of "transparent" if (t_0) return (SetEitherOrProperty(t_0, transparent, true)); rfalse; ]; [ Adj_74_t3_v10 t_0 ! Call parameter: object ; ! meaning of "open" if (t_0) return (SetEitherOrProperty(t_0, open, true)); rfalse; ]; [ Adj_75_t3_v10 t_0 ! Call parameter: object ; ! meaning of "closed" if (t_0) return (SetEitherOrProperty(t_0, open)); rfalse; ]; [ Adj_76_t3_v10 t_0 ! Call parameter: object ; ! meaning of "openable" if (t_0) return (SetEitherOrProperty(t_0, openable, true)); rfalse; ]; [ Adj_77_t3_v10 t_0 ! Call parameter: object ; ! meaning of "unopenable" if (t_0) return (SetEitherOrProperty(t_0, openable)); rfalse; ]; [ Adj_78_t3_v10 t_0 ! Call parameter: object ; ! meaning of "lockable" if (t_0) return (SetEitherOrProperty(t_0, lockable, true)); rfalse; ]; [ Adj_79_t3_v10 t_0 ! Call parameter: object ; ! meaning of "locked" if (t_0) return (SetEitherOrProperty(t_0, locked, true)); rfalse; ]; [ Adj_80_t3_v10 t_0 ! Call parameter: object ; ! meaning of "unlocked" if (t_0) return (SetEitherOrProperty(t_0, locked)); rfalse; ]; [ Adj_81_t3_v10 t_0 ! Call parameter: object ; ! meaning of "female" if (t_0) return (SetEitherOrProperty(t_0, female, true)); rfalse; ]; [ Adj_82_t3_v10 t_0 ! Call parameter: object ; ! meaning of "male" if (t_0) return (SetEitherOrProperty(t_0, female)); rfalse; ]; [ Adj_83_t3_v10 t_0 ! Call parameter: object ; ! meaning of "neuter" if (t_0) return (SetEitherOrProperty(t_0, neuter, true)); rfalse; ]; [ Adj_84_t3_v10 t_0 ! Call parameter: object ; ! meaning of "switched on" if (t_0) return (SetEitherOrProperty(t_0, on, true)); rfalse; ]; [ Adj_85_t3_v10 t_0 ! Call parameter: object ; ! meaning of "switched off" if (t_0) return (SetEitherOrProperty(t_0, on)); rfalse; ]; [ Adj_86_t3_v43 t_0 ! Call parameter: scene ; ! meaning of "recurring" return (WriteGProperty(SCENE_TY, t_0, p57_recurring)); rfalse; ]; [ Adj_87_t3_v43 t_0 ! Call parameter: scene ; ! meaning of "non-recurring" return (WriteGProperty(SCENE_TY, t_0, p57_recurring, true)); rfalse; ]; [ Adj_88_t3_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (SetEitherOrProperty(t_0, absent, true)); rfalse; ]; [ Adj_89_t3_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (SetEitherOrProperty(t_0, mark_as_room, true)); rfalse; ]; [ Adj_90_t3_v10 t_0 ! Call parameter: object ; ! meaning of "" if (t_0) return (SetEitherOrProperty(t_0, mark_as_thing, true)); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Timed Events ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array TimedEventsTable table 0 0; Array TimedEventTimesTable table 0 0; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Rulebooks ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array rulebooks_array --> B0_startup B1_turn_sequence B2_shutdown B3_scene_changing B4_when_play_begins B5_when_play_ends B6_when_scene_begins B7_when_scene_ends B8_every_turn B9_action_processing B10_setting_action_variables B11_specific_action_processi B12_player_s_action_awarenes B13_accessibility B14_reaching_inside B15_reaching_outside B16_visibility B17_persuasion B18_unsuccessful_attempt_by B19_before B20_instead B21_check B22_carry_out B23_after B24_report B25_does_the_player_mean B26_multiple_action_processi B27_when_entire_game_begins B28_when_entire_game_ends B29_before_printing_the_name B30_for_printing_the_name B31_after_printing_the_name B32_before_printing_the_plur B33_for_printing_the_plural_ B34_after_printing_the_plura B35_before_printing_a_number B36_for_printing_a_number B37_after_printing_a_number B38_before_printing_room_des B39_for_printing_room_descri B40_after_printing_room_desc B41_before_printing_inventor B42_for_printing_inventory_d B43_after_printing_inventory B44_before_listing_contents B45_for_listing_contents B46_after_listing_contents B47_before_grouping_together B48_for_grouping_together B49_after_grouping_together B50_before_writing_a_paragra B51_for_writing_a_paragraph_ B52_after_writing_a_paragrap B53_before_listing_nondescri B54_for_listing_nondescript_ B55_after_listing_nondescrip B56_before_printing_the_name B57_for_printing_the_name_of B58_after_printing_the_name_ B59_before_printing_the_desc B60_for_printing_the_descrip B61_after_printing_the_descr B62_before_printing_the_anno B63_for_printing_the_announc B64_after_printing_the_annou B65_before_printing_the_anno B66_for_printing_the_announc B67_after_printing_the_annou B68_before_printing_a_refusa B69_for_printing_a_refusal_t B70_after_printing_a_refusal B71_before_constructing_the_ B72_for_constructing_the_sta B73_after_constructing_the_s B74_before_printing_the_bann B75_for_printing_the_banner_ B76_after_printing_the_banne B77_before_reading_a_command B78_for_reading_a_command B79_after_reading_a_command B80_before_deciding_the_scop B81_for_deciding_the_scope B82_after_deciding_the_scope B83_before_deciding_the_conc B84_for_deciding_the_conceal B85_after_deciding_the_conce B86_before_deciding_whether_ B87_for_deciding_whether_all B88_after_deciding_whether_a B89_before_clarifying_the_pa B90_for_clarifying_the_parse B91_after_clarifying_the_par B92_before_asking_which_do_y B93_for_asking_which_do_you_ B94_after_asking_which_do_yo B95_before_printing_a_parser B96_for_printing_a_parser_er B97_after_printing_a_parser_ B98_before_supplying_a_missi B99_for_supplying_a_missing_ B100_after_supplying_a_missi B101_before_supplying_a_miss B102_for_supplying_a_missing B103_after_supplying_a_missi B104_before_implicitly_takin B105_for_implicitly_taking B106_after_implicitly_taking B107_before_starting_the_vir B108_for_starting_the_virtua B109_after_starting_the_virt B110_before_amusing_a_victor B111_for_amusing_a_victoriou B112_after_amusing_a_victori B113_before_printing_the_pla B114_for_printing_the_player B115_after_printing_the_play B116_before_handling_the_fin B117_for_handling_the_final_ B118_after_handling_the_fina B119_before_printing_the_loc B120_for_printing_the_locale B121_after_printing_the_loca B122_before_choosing_notable B123_for_choosing_notable_lo B124_after_choosing_notable_ B125_before_printing_a_local B126_for_printing_a_locale_p B127_after_printing_a_locale B128_before_issuing_the_resp B129_for_issuing_the_respons B130_after_issuing_the_respo B131_check_taking_inventory B132_carry_out_taking_invent B133_report_taking_inventory B134_check_taking B135_carry_out_taking B136_report_taking B137_check_removing_it_from B138_carry_out_removing_it_f B139_report_removing_it_from B140_check_dropping B141_carry_out_dropping B142_report_dropping B143_check_putting_it_on B144_carry_out_putting_it_on B145_report_putting_it_on B146_check_inserting_it_into B147_carry_out_inserting_it_ B148_report_inserting_it_int B149_check_eating B150_carry_out_eating B151_report_eating B152_check_going B153_carry_out_going B154_report_going B155_check_entering B156_carry_out_entering B157_report_entering B158_check_exiting B159_carry_out_exiting B160_report_exiting B161_check_getting_off B162_carry_out_getting_off B163_report_getting_off B164_check_looking B165_carry_out_looking B166_report_looking B167_check_examining B168_carry_out_examining B169_report_examining B170_check_looking_under B171_carry_out_looking_under B172_report_looking_under B173_check_searching B174_carry_out_searching B175_report_searching B176_check_consulting_it_abo B177_carry_out_consulting_it B178_report_consulting_it_ab B179_check_locking_it_with B180_carry_out_locking_it_wi B181_report_locking_it_with B182_check_unlocking_it_with B183_carry_out_unlocking_it_ B184_report_unlocking_it_wit B185_check_switching_on B186_carry_out_switching_on B187_report_switching_on B188_check_switching_off B189_carry_out_switching_off B190_report_switching_off B191_check_opening B192_carry_out_opening B193_report_opening B194_check_closing B195_carry_out_closing B196_report_closing B197_check_wearing B198_carry_out_wearing B199_report_wearing B200_check_taking_off B201_carry_out_taking_off B202_report_taking_off B203_check_giving_it_to B204_carry_out_giving_it_to B205_report_giving_it_to B206_check_showing_it_to B207_carry_out_showing_it_to B208_report_showing_it_to B209_check_waking B210_carry_out_waking B211_report_waking B212_check_throwing_it_at B213_carry_out_throwing_it_a B214_report_throwing_it_at B215_check_attacking B216_carry_out_attacking B217_report_attacking B218_check_kissing B219_carry_out_kissing B220_report_kissing B221_check_answering_it_that B222_carry_out_answering_it_ B223_report_answering_it_tha B224_check_telling_it_about B225_carry_out_telling_it_ab B226_report_telling_it_about B227_check_asking_it_about B228_carry_out_asking_it_abo B229_report_asking_it_about B230_check_asking_it_for B231_carry_out_asking_it_for B232_report_asking_it_for B233_check_waiting B234_carry_out_waiting B235_report_waiting B236_check_touching B237_carry_out_touching B238_report_touching B239_check_waving B240_carry_out_waving B241_report_waving B242_check_pulling B243_carry_out_pulling B244_report_pulling B245_check_pushing B246_carry_out_pushing B247_report_pushing B248_check_turning B249_carry_out_turning B250_report_turning B251_check_pushing_it_to B252_carry_out_pushing_it_to B253_report_pushing_it_to B254_check_squeezing B255_carry_out_squeezing B256_report_squeezing B257_check_saying_yes B258_carry_out_saying_yes B259_report_saying_yes B260_check_saying_no B261_carry_out_saying_no B262_report_saying_no B263_check_burning B264_carry_out_burning B265_report_burning B266_check_waking_up B267_carry_out_waking_up B268_report_waking_up B269_check_thinking B270_carry_out_thinking B271_report_thinking B272_check_smelling B273_carry_out_smelling B274_report_smelling B275_check_listening_to B276_carry_out_listening_to B277_report_listening_to B278_check_tasting B279_carry_out_tasting B280_report_tasting B281_check_cutting B282_carry_out_cutting B283_report_cutting B284_check_jumping B285_carry_out_jumping B286_report_jumping B287_check_tying_it_to B288_carry_out_tying_it_to B289_report_tying_it_to B290_check_drinking B291_carry_out_drinking B292_report_drinking B293_check_saying_sorry B294_carry_out_saying_sorry B295_report_saying_sorry B296_check_swinging B297_carry_out_swinging B298_report_swinging B299_check_rubbing B300_carry_out_rubbing B301_report_rubbing B302_check_setting_it_to B303_carry_out_setting_it_to B304_report_setting_it_to B305_check_waving_hands B306_carry_out_waving_hands B307_report_waving_hands B308_check_buying B309_carry_out_buying B310_report_buying B311_check_climbing B312_carry_out_climbing B313_report_climbing B314_check_sleeping B315_carry_out_sleeping B316_report_sleeping B317_check_quitting_the_game B318_carry_out_quitting_the_ B319_report_quitting_the_gam B320_check_saving_the_game B321_carry_out_saving_the_ga B322_report_saving_the_game B323_check_restoring_the_gam B324_carry_out_restoring_the B325_report_restoring_the_ga B326_check_restarting_the_ga B327_carry_out_restarting_th B328_report_restarting_the_g B329_check_verifying_the_sto B330_carry_out_verifying_the B331_report_verifying_the_st B332_check_switching_the_sto B333_carry_out_switching_the B334_report_switching_the_st B335_check_switching_the_sto B336_carry_out_switching_the B337_report_switching_the_st B338_check_requesting_the_st B339_carry_out_requesting_th B340_report_requesting_the_s B341_check_requesting_the_sc B342_carry_out_requesting_th B343_report_requesting_the_s B344_check_preferring_abbrev B345_carry_out_preferring_ab B346_report_preferring_abbre B347_check_preferring_unabbr B348_carry_out_preferring_un B349_report_preferring_unabb B350_check_preferring_someti B351_carry_out_preferring_so B352_report_preferring_somet B353_check_switching_score_n B354_carry_out_switching_sco B355_report_switching_score_ B356_check_switching_score_n B357_carry_out_switching_sco B358_report_switching_score_ B359_check_requesting_the_pr B360_carry_out_requesting_th B361_report_requesting_the_p B362_before_pausing_the_game B363_for_pausing_the_game B364_after_pausing_the_game B365_before_refusing_keys B366_for_refusing_keys B367_after_refusing_keys B368_check_unlocking_keyless B369_carry_out_unlocking_key B370_report_unlocking_keyles B371_check_locking_keylessly B372_carry_out_locking_keyle B373_report_locking_keylessl B374_when_mystery_begins B375_when_mystery_ends B376_check_escaping B377_carry_out_escaping B378_report_escaping B379_check_typing B380_carry_out_typing B381_report_typing B382_check_unscrewing B383_carry_out_unscrewing B384_report_unscrewing B385_when_discovery_begins B386_when_discovery_ends B387_check_helping B388_carry_out_helping B389_report_helping B390_check_hinting B391_carry_out_hinting B392_report_hinting 0; [ EMPTY_RULEBOOK forbid_breaks ! Implied call parameter ; rfalse; ]; [ B0_startup forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = INITIALISE_MEMORY_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return INITIALISE_MEMORY_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = VIRTUAL_MACHINE_STARTUP_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return VIRTUAL_MACHINE_STARTUP_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = SEED_RANDOM_NUMBER_GENERATOR_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return SEED_RANDOM_NUMBER_GENERATOR_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = UPDATE_CHRONOLOGICAL_RECORDS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return UPDATE_CHRONOLOGICAL_RECORDS_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_9(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_9; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = POSITION_PLAYER_IN_MODEL_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return POSITION_PLAYER_IN_MODEL_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_10(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_10; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_11(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_11; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_12(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_12; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_13(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_13; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_14(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_14; } latest_rule_result-->0 = 0; return 0; ! 11 rule(s) ]; [ B1_turn_sequence forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = PARSE_COMMAND_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return PARSE_COMMAND_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_9(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_9; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = GENERATE_ACTION_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return GENERATE_ACTION_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_16(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_16; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_15(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_15; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = TIMED_EVENTS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return TIMED_EVENTS_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = ADVANCE_TIME_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ADVANCE_TIME_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = UPDATE_CHRONOLOGICAL_RECORDS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return UPDATE_CHRONOLOGICAL_RECORDS_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_17(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_17; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = ADJUST_LIGHT_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ADJUST_LIGHT_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = NOTE_OBJECT_ACQUISITIONS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return NOTE_OBJECT_ACQUISITIONS_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_18(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_18; } latest_rule_result-->0 = 0; return 0; ! 12 rule(s) ]; [ B2_shutdown forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_19(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_19; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = RESURRECT_PLAYER_IF_ASKED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return RESURRECT_PLAYER_IF_ASKED_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_20(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_20; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = ASK_FINAL_QUESTION_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ASK_FINAL_QUESTION_R; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; [ B3_scene_changing forbid_breaks ! Implied call parameter rv ! return value ; rv = DetectSceneChange(); if (rv) { if (rv == 2) return reason_the_action_failed; return DetectSceneChange; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B4_when_play_begins forbid_breaks ! Implied call parameter rv ! return value ; rv = R_852(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_852; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B5_when_play_ends forbid_breaks ! Implied call parameter rv ! return value ; rv = R_911(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_911; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B6_when_scene_begins forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_65(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_65; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B7_when_scene_ends = EMPTY_RULEBOOK; [ B8_every_turn forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_878(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_878; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_853(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_853; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_910(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_910; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; [ B9_action_processing forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_22(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_22; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_21(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_21; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_23(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_23; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = BASIC_VISIBILITY_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return BASIC_VISIBILITY_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = BASIC_ACCESSIBILITY_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return BASIC_ACCESSIBILITY_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_844(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_844; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_24(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_24; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = REQUESTED_ACTIONS_REQUIRE_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return REQUESTED_ACTIONS_REQUIRE_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = CARRY_OUT_REQUESTED_ACTIONS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return CARRY_OUT_REQUESTED_ACTIONS_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = DESCEND_TO_SPECIFIC_ACTION_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return DESCEND_TO_SPECIFIC_ACTION_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_25(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_25; } latest_rule_result-->0 = 0; return 0; ! 11 rule(s) ]; [ B10_setting_action_variables forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; if (action == ##Go) { rv = R_151(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_151; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Exit) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_174(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_174; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Look) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_186(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_186; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } return 0; ! 3 rule(s) ]; [ B11_specific_action_processi forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = WORK_OUT_DETAILS_OF_SPECIFIC_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return WORK_OUT_DETAILS_OF_SPECIFIC_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_26(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_26; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_27(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_27; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_28(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_28; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_29(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_29; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_30(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_30; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_31(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_31; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_32(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_32; } latest_rule_result-->0 = 0; return 0; ! 8 rule(s) ]; [ B12_player_s_action_awarenes forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_33(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_33; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_34(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_34; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_35(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_35; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_36(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_36; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; [ B13_accessibility forbid_breaks ! Implied call parameter rv ! return value ; rv = ACCESS_THROUGH_BARRIERS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ACCESS_THROUGH_BARRIERS_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B14_reaching_inside forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = CANT_REACH_INSIDE_ROOMS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return CANT_REACH_INSIDE_ROOMS_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = CANT_REACH_INSIDE_CLOSED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return CANT_REACH_INSIDE_CLOSED_R; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B15_reaching_outside forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = CANT_REACH_OUTSIDE_CLOSED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return CANT_REACH_OUTSIDE_CLOSED_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B16_visibility forbid_breaks ! Implied call parameter rv ! return value ; rv = R_37(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_37; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B17_persuasion = EMPTY_RULEBOOK; Constant B18_unsuccessful_attempt_by = EMPTY_RULEBOOK; [ B19_before forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; if (action == ##Go) { rv = R_821(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_821; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_817(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_817; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Lock) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_822(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_822; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_818(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_818; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##A78_locking_keylessly) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_823(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_823; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Open) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_824(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_824; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##A78_locking_keylessly) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_819(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_819; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Open) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_820(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_820; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } return 0; ! 8 rule(s) ]; [ B20_instead forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; if (action == ##Go) { rv = R_857(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_857; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_858(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_858; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_860(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_860; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_861(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_861; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_891(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_891; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_892(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_892; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_893(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_893; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_894(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_894; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_895(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_895; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_898(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_898; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_899(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_899; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_902(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_902; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_903(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_903; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_908(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_908; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Exit) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_859(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_859; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Go) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_888(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_888; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##PutOn) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_843(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_843; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Listen) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_854(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_854; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Smell) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_855(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_855; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Go) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_856(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_856; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Take) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_864(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_864; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Open) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_866(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_866; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_868(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_868; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Push) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_875(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_875; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_877(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_877; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Attack) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_880(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_880; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_881(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_881; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Take) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_883(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_883; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Attack) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_885(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_885; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Touch) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_886(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_886; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Take) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_889(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_889; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_890(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_890; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Enter) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_896(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_896; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Climb) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_897(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_897; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Enter) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_900(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_900; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Climb) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_901(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_901; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Attack) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_905(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_905; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Take) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_906(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_906; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Open) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_907(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_907; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Enter) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_863(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_863; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##A79_escaping) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_867(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_867; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } return 0; ! 41 rule(s) ]; Constant B21_check = EMPTY_RULEBOOK; Constant B22_carry_out = EMPTY_RULEBOOK; [ B23_after forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; if (action == ##Unlock) { rv = R_865(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_865; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_869(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_869; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##PutOn) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_879(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_879; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##A80_typing) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_873(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_873; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Examine) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_838(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_838; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##A83_hinting) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_920(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_920; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } return 0; ! 6 rule(s) ]; Constant B24_report = EMPTY_RULEBOOK; [ B25_does_the_player_mean forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; if (action == ##Take) { rv = R_38(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_38; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } if (action == ##Disrobe) { if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_242(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_242; } latest_rule_result-->0 = 0; } else { if (say__p) RulebookParBreak(forbid_breaks); } return 0; ! 2 rule(s) ]; Constant B26_multiple_action_processi = EMPTY_RULEBOOK; Constant B27_when_entire_game_begins = EMPTY_RULEBOOK; Constant B28_when_entire_game_ends = EMPTY_RULEBOOK; [ B29_before_printing_the_name forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_66(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_66; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B30_for_printing_the_name forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = STANDARD_NAME_PRINTING_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return STANDARD_NAME_PRINTING_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B31_after_printing_the_name forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_837(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_837; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B32_before_printing_the_plur = EMPTY_RULEBOOK; [ B33_for_printing_the_plural_ forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_67(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_67; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B34_after_printing_the_plura = EMPTY_RULEBOOK; Constant B35_before_printing_a_number = EMPTY_RULEBOOK; [ B36_for_printing_a_number forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_68(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_68; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B37_after_printing_a_number = EMPTY_RULEBOOK; Constant B38_before_printing_room_des = EMPTY_RULEBOOK; Constant B39_for_printing_room_descri = EMPTY_RULEBOOK; Constant B40_after_printing_room_desc = EMPTY_RULEBOOK; Constant B41_before_printing_inventor = EMPTY_RULEBOOK; Constant B42_for_printing_inventory_d = EMPTY_RULEBOOK; Constant B43_after_printing_inventory = EMPTY_RULEBOOK; Constant B44_before_listing_contents = EMPTY_RULEBOOK; [ B45_for_listing_contents forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = STANDARD_CONTENTS_LISTING_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return STANDARD_CONTENTS_LISTING_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B46_after_listing_contents = EMPTY_RULEBOOK; Constant B47_before_grouping_together = EMPTY_RULEBOOK; Constant B48_for_grouping_together = EMPTY_RULEBOOK; Constant B49_after_grouping_together = EMPTY_RULEBOOK; Constant B50_before_writing_a_paragra = EMPTY_RULEBOOK; Constant B51_for_writing_a_paragraph_ = EMPTY_RULEBOOK; Constant B52_after_writing_a_paragrap = EMPTY_RULEBOOK; Constant B53_before_listing_nondescri = EMPTY_RULEBOOK; Constant B54_for_listing_nondescript_ = EMPTY_RULEBOOK; Constant B55_after_listing_nondescrip = EMPTY_RULEBOOK; Constant B56_before_printing_the_name = EMPTY_RULEBOOK; Constant B57_for_printing_the_name_of = EMPTY_RULEBOOK; Constant B58_after_printing_the_name_ = EMPTY_RULEBOOK; Constant B59_before_printing_the_desc = EMPTY_RULEBOOK; Constant B60_for_printing_the_descrip = EMPTY_RULEBOOK; Constant B61_after_printing_the_descr = EMPTY_RULEBOOK; Constant B62_before_printing_the_anno = EMPTY_RULEBOOK; Constant B63_for_printing_the_announc = EMPTY_RULEBOOK; Constant B64_after_printing_the_annou = EMPTY_RULEBOOK; Constant B65_before_printing_the_anno = EMPTY_RULEBOOK; [ B66_for_printing_the_announc forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_69(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_69; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B67_after_printing_the_annou = EMPTY_RULEBOOK; Constant B68_before_printing_a_refusa = EMPTY_RULEBOOK; Constant B69_for_printing_a_refusal_t = EMPTY_RULEBOOK; Constant B70_after_printing_a_refusal = EMPTY_RULEBOOK; Constant B71_before_constructing_the_ = EMPTY_RULEBOOK; Constant B72_for_constructing_the_sta = EMPTY_RULEBOOK; Constant B73_after_constructing_the_s = EMPTY_RULEBOOK; Constant B74_before_printing_the_bann = EMPTY_RULEBOOK; Constant B75_for_printing_the_banner_ = EMPTY_RULEBOOK; Constant B76_after_printing_the_banne = EMPTY_RULEBOOK; Constant B77_before_reading_a_command = EMPTY_RULEBOOK; Constant B78_for_reading_a_command = EMPTY_RULEBOOK; [ B79_after_reading_a_command forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_909(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_909; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B80_before_deciding_the_scop = EMPTY_RULEBOOK; Constant B81_for_deciding_the_scope = EMPTY_RULEBOOK; Constant B82_after_deciding_the_scope = EMPTY_RULEBOOK; Constant B83_before_deciding_the_conc = EMPTY_RULEBOOK; Constant B84_for_deciding_the_conceal = EMPTY_RULEBOOK; Constant B85_after_deciding_the_conce = EMPTY_RULEBOOK; Constant B86_before_deciding_whether_ = EMPTY_RULEBOOK; [ B87_for_deciding_whether_all forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = R_74(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_74; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_70(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_70; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_73(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_73; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_72(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_72; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_71(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_71; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_845(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_845; } latest_rule_result-->0 = 0; return 0; ! 6 rule(s) ]; Constant B88_after_deciding_whether_a = EMPTY_RULEBOOK; Constant B89_before_clarifying_the_pa = EMPTY_RULEBOOK; Constant B90_for_clarifying_the_parse = EMPTY_RULEBOOK; Constant B91_after_clarifying_the_par = EMPTY_RULEBOOK; Constant B92_before_asking_which_do_y = EMPTY_RULEBOOK; Constant B93_for_asking_which_do_you_ = EMPTY_RULEBOOK; Constant B94_after_asking_which_do_yo = EMPTY_RULEBOOK; Constant B95_before_printing_a_parser = EMPTY_RULEBOOK; Constant B96_for_printing_a_parser_er = EMPTY_RULEBOOK; Constant B97_after_printing_a_parser_ = EMPTY_RULEBOOK; Constant B98_before_supplying_a_missi = EMPTY_RULEBOOK; [ B99_for_supplying_a_missing_ forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = R_75(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_75; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_76(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_76; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_77(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_77; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_162(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_162; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; Constant B100_after_supplying_a_missi = EMPTY_RULEBOOK; Constant B101_before_supplying_a_miss = EMPTY_RULEBOOK; Constant B102_for_supplying_a_missing = EMPTY_RULEBOOK; Constant B103_after_supplying_a_missi = EMPTY_RULEBOOK; Constant B104_before_implicitly_takin = EMPTY_RULEBOOK; [ B105_for_implicitly_taking forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = STANDARD_IMPLICIT_TAKING_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return STANDARD_IMPLICIT_TAKING_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B106_after_implicitly_taking = EMPTY_RULEBOOK; Constant B107_before_starting_the_vir = EMPTY_RULEBOOK; [ B108_for_starting_the_virtua forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = ENABLE_GLULX_ACCEL_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ENABLE_GLULX_ACCEL_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B109_after_starting_the_virt = EMPTY_RULEBOOK; Constant B110_before_amusing_a_victor = EMPTY_RULEBOOK; Constant B111_for_amusing_a_victoriou = EMPTY_RULEBOOK; Constant B112_after_amusing_a_victori = EMPTY_RULEBOOK; Constant B113_before_printing_the_pla = EMPTY_RULEBOOK; [ B114_for_printing_the_player forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = PRINT_FINAL_SCORE_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return PRINT_FINAL_SCORE_R; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = DISPLAY_FINAL_STATUS_LINE_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return DISPLAY_FINAL_STATUS_LINE_R; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; Constant B115_after_printing_the_play = EMPTY_RULEBOOK; [ B116_before_handling_the_fin forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = R_79(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_79; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_78(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_78; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = READ_FINAL_ANSWER_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return READ_FINAL_ANSWER_R; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; [ B117_for_handling_the_final_ forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_80(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_80; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B118_after_handling_the_fina = EMPTY_RULEBOOK; [ B119_before_printing_the_loc forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = R_83(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_83; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_84(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_84; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B120_for_printing_the_locale forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = R_85(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_85; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_86(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_86; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; Constant B121_after_printing_the_loca = EMPTY_RULEBOOK; Constant B122_before_choosing_notable = EMPTY_RULEBOOK; [ B123_for_choosing_notable_lo forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_87(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_87; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B124_after_choosing_notable_ = EMPTY_RULEBOOK; Constant B125_before_printing_a_local = EMPTY_RULEBOOK; [ B126_for_printing_a_locale_p forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state p ! rulebook parameter ; original_deadflag = deadflag; p = parameter_value; parameter_value = p; rv = R_94(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_94; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_88(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_88; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_89(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_89; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_90(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_90; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_91(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_91; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_92(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_92; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_93(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_93; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_96(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_96; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); parameter_value = p; rv = R_97(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_97; } latest_rule_result-->0 = 0; return 0; ! 9 rule(s) ]; Constant B127_after_printing_a_locale = EMPTY_RULEBOOK; Constant B128_before_issuing_the_resp = EMPTY_RULEBOOK; [ B129_for_issuing_the_respons forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = STANDARD_RESPONSE_ISSUING_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return STANDARD_RESPONSE_ISSUING_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B130_after_issuing_the_respo = EMPTY_RULEBOOK; Constant B131_check_taking_inventory = EMPTY_RULEBOOK; [ B132_carry_out_taking_invent forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_98(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_98; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_99(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_99; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B133_report_taking_inventory forbid_breaks ! Implied call parameter rv ! return value ; rv = R_100(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_100; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B134_check_taking forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_101(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_101; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_102(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_102; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_103(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_103; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_104(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_104; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_105(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_105; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_106(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_106; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_107(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_107; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_108(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_108; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_109(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_109; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_110(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_110; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_111(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_111; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_112(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_112; } latest_rule_result-->0 = 0; return 0; ! 12 rule(s) ]; [ B135_carry_out_taking forbid_breaks ! Implied call parameter rv ! return value ; rv = R_113(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_113; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B136_report_taking forbid_breaks ! Implied call parameter rv ! return value ; rv = R_114(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_114; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B137_check_removing_it_from forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_103(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_103; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_115(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_115; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_116(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_116; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_117(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_117; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; Constant B138_carry_out_removing_it_f = EMPTY_RULEBOOK; Constant B139_report_removing_it_from = EMPTY_RULEBOOK; [ B140_check_dropping forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_119(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_119; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_118(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_118; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_120(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_120; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_121(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_121; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_122(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_122; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_123(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_123; } latest_rule_result-->0 = 0; return 0; ! 6 rule(s) ]; [ B141_carry_out_dropping forbid_breaks ! Implied call parameter rv ! return value ; rv = R_124(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_124; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B142_report_dropping forbid_breaks ! Implied call parameter rv ! return value ; rv = R_125(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_125; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B143_check_putting_it_on forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_126(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_126; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_127(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_127; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_128(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_128; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_129(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_129; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_130(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_130; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_131(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_131; } latest_rule_result-->0 = 0; return 0; ! 6 rule(s) ]; [ B144_carry_out_putting_it_on forbid_breaks ! Implied call parameter rv ! return value ; rv = R_132(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_132; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B145_report_putting_it_on forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_133(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_133; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_134(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_134; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B146_check_inserting_it_into forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_135(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_135; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_136(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_136; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_137(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_137; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_138(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_138; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_139(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_139; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_140(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_140; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_141(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_141; } latest_rule_result-->0 = 0; return 0; ! 7 rule(s) ]; [ B147_carry_out_inserting_it_ forbid_breaks ! Implied call parameter rv ! return value ; rv = R_142(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_142; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B148_report_inserting_it_int forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_143(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_143; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_144(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_144; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B149_check_eating forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_145(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_145; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_146(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_146; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_147(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_147; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_148(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_148; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; [ B150_carry_out_eating forbid_breaks ! Implied call parameter rv ! return value ; rv = R_149(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_149; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B151_report_eating forbid_breaks ! Implied call parameter rv ! return value ; rv = R_150(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_150; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B152_check_going forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_152(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_152; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_153(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_153; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_154(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_154; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_155(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_155; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_156(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_156; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_157(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_157; } latest_rule_result-->0 = 0; return 0; ! 6 rule(s) ]; [ B153_carry_out_going forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_862(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_862; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_158(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_158; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_159(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_159; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_160(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_160; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; [ B154_report_going forbid_breaks ! Implied call parameter rv ! return value ; rv = R_161(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_161; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B155_check_entering forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_163(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_163; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_164(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_164; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_165(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_165; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_166(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_166; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_167(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_167; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_168(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_168; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_169(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_169; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_170(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_170; } latest_rule_result-->0 = 0; return 0; ! 8 rule(s) ]; [ B156_carry_out_entering forbid_breaks ! Implied call parameter rv ! return value ; rv = R_171(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_171; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B157_report_entering forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_172(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_172; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_173(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_173; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B158_check_exiting forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_175(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_175; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_176(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_176; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_177(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_177; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_178(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_178; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; [ B159_carry_out_exiting forbid_breaks ! Implied call parameter rv ! return value ; rv = R_179(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_179; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B160_report_exiting forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_180(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_180; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_181(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_181; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B161_check_getting_off forbid_breaks ! Implied call parameter rv ! return value ; rv = R_182(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_182; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B162_carry_out_getting_off forbid_breaks ! Implied call parameter rv ! return value ; rv = R_183(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_183; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B163_report_getting_off forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_184(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_184; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_185(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_185; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; Constant B164_check_looking = EMPTY_RULEBOOK; [ B165_carry_out_looking forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_187(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_187; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_188(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_188; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_189(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_189; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_190(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_190; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_191(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_191; } latest_rule_result-->0 = 0; return 0; ! 5 rule(s) ]; [ B166_report_looking forbid_breaks ! Implied call parameter rv ! return value ; rv = R_192(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_192; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B167_check_examining = EMPTY_RULEBOOK; [ B168_carry_out_examining forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_193(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_193; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_194(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_194; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_195(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_195; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_196(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_196; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_197(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_197; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_198(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_198; } latest_rule_result-->0 = 0; return 0; ! 6 rule(s) ]; [ B169_report_examining forbid_breaks ! Implied call parameter rv ! return value ; rv = R_199(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_199; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B170_check_looking_under = EMPTY_RULEBOOK; [ B171_carry_out_looking_under forbid_breaks ! Implied call parameter rv ! return value ; rv = R_200(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_200; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B172_report_looking_under forbid_breaks ! Implied call parameter rv ! return value ; rv = R_201(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_201; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B173_check_searching forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_202(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_202; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_203(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_203; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; Constant B174_carry_out_searching = EMPTY_RULEBOOK; [ B175_report_searching forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_204(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_204; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_205(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_205; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_206(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_206; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; Constant B176_check_consulting_it_abo = EMPTY_RULEBOOK; Constant B177_carry_out_consulting_it = EMPTY_RULEBOOK; [ B178_report_consulting_it_ab forbid_breaks ! Implied call parameter rv ! return value ; rv = R_207(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_207; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B179_check_locking_it_with forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_208(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_208; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_209(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_209; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_210(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_210; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_830(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_830; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_833(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_833; } latest_rule_result-->0 = 0; return 0; ! 5 rule(s) ]; [ B180_carry_out_locking_it_wi forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_841(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_841; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_212(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_212; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B181_report_locking_it_with forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_842(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_842; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_213(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_213; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B182_check_unlocking_it_with forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_214(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_214; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_215(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_215; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_830(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_830; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_829(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_829; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; [ B183_carry_out_unlocking_it_ forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_882(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_882; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_839(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_839; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_217(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_217; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; [ B184_report_unlocking_it_wit forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_840(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_840; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_218(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_218; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B185_check_switching_on forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_874(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_874; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_876(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_876; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_219(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_219; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_220(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_220; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; [ B186_carry_out_switching_on forbid_breaks ! Implied call parameter rv ! return value ; rv = R_221(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_221; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B187_report_switching_on forbid_breaks ! Implied call parameter rv ! return value ; rv = R_222(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_222; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B188_check_switching_off forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_223(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_223; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_224(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_224; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B189_carry_out_switching_off forbid_breaks ! Implied call parameter rv ! return value ; rv = R_225(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_225; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B190_report_switching_off forbid_breaks ! Implied call parameter rv ! return value ; rv = R_226(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_226; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B191_check_opening forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_227(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_227; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_228(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_228; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_229(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_229; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; [ B192_carry_out_opening forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_904(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_904; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_230(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_230; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B193_report_opening forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_231(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_231; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_232(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_232; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B194_check_closing forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_233(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_233; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_234(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_234; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B195_carry_out_closing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_235(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_235; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B196_report_closing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_236(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_236; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B197_check_wearing forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_237(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_237; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_238(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_238; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_239(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_239; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; [ B198_carry_out_wearing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_240(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_240; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B199_report_wearing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_241(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_241; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B200_check_taking_off forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_243(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_243; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_244(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_244; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B201_carry_out_taking_off forbid_breaks ! Implied call parameter rv ! return value ; rv = R_245(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_245; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B202_report_taking_off forbid_breaks ! Implied call parameter rv ! return value ; rv = R_246(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_246; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B203_check_giving_it_to forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_247(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_247; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_248(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_248; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_249(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_249; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_250(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_250; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_251(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_251; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_252(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_252; } latest_rule_result-->0 = 0; return 0; ! 6 rule(s) ]; [ B204_carry_out_giving_it_to forbid_breaks ! Implied call parameter rv ! return value ; rv = R_253(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_253; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B205_report_giving_it_to forbid_breaks ! Implied call parameter rv ! return value ; rv = R_254(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_254; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B206_check_showing_it_to forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_255(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_255; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_256(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_256; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_257(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_257; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; Constant B207_carry_out_showing_it_to = EMPTY_RULEBOOK; Constant B208_report_showing_it_to = EMPTY_RULEBOOK; [ B209_check_waking forbid_breaks ! Implied call parameter rv ! return value ; rv = R_258(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_258; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B210_carry_out_waking = EMPTY_RULEBOOK; Constant B211_report_waking = EMPTY_RULEBOOK; [ B212_check_throwing_it_at forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_259(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_259; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_260(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_260; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_261(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_261; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; Constant B213_carry_out_throwing_it_a = EMPTY_RULEBOOK; Constant B214_report_throwing_it_at = EMPTY_RULEBOOK; [ B215_check_attacking forbid_breaks ! Implied call parameter rv ! return value ; rv = R_262(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_262; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B216_carry_out_attacking = EMPTY_RULEBOOK; Constant B217_report_attacking = EMPTY_RULEBOOK; [ B218_check_kissing forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_263(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_263; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_264(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_264; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; Constant B219_carry_out_kissing = EMPTY_RULEBOOK; Constant B220_report_kissing = EMPTY_RULEBOOK; Constant B221_check_answering_it_that = EMPTY_RULEBOOK; Constant B222_carry_out_answering_it_ = EMPTY_RULEBOOK; [ B223_report_answering_it_tha forbid_breaks ! Implied call parameter rv ! return value ; rv = R_265(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_265; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B224_check_telling_it_about forbid_breaks ! Implied call parameter rv ! return value ; rv = R_266(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_266; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B225_carry_out_telling_it_ab = EMPTY_RULEBOOK; [ B226_report_telling_it_about forbid_breaks ! Implied call parameter rv ! return value ; rv = R_267(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_267; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B227_check_asking_it_about = EMPTY_RULEBOOK; Constant B228_carry_out_asking_it_abo = EMPTY_RULEBOOK; [ B229_report_asking_it_about forbid_breaks ! Implied call parameter rv ! return value ; rv = R_268(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_268; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B230_check_asking_it_for forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_269(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_269; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_270(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_270; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; Constant B231_carry_out_asking_it_for = EMPTY_RULEBOOK; Constant B232_report_asking_it_for = EMPTY_RULEBOOK; Constant B233_check_waiting = EMPTY_RULEBOOK; Constant B234_carry_out_waiting = EMPTY_RULEBOOK; [ B235_report_waiting forbid_breaks ! Implied call parameter rv ! return value ; rv = R_271(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_271; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B236_check_touching = EMPTY_RULEBOOK; Constant B237_carry_out_touching = EMPTY_RULEBOOK; [ B238_report_touching forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_272(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_272; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_273(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_273; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_274(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_274; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; [ B239_check_waving forbid_breaks ! Implied call parameter rv ! return value ; rv = R_275(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_275; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B240_carry_out_waving = EMPTY_RULEBOOK; [ B241_report_waving forbid_breaks ! Implied call parameter rv ! return value ; rv = R_276(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_276; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B242_check_pulling forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_277(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_277; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_278(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_278; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_279(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_279; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; Constant B243_carry_out_pulling = EMPTY_RULEBOOK; [ B244_report_pulling forbid_breaks ! Implied call parameter rv ! return value ; rv = R_280(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_280; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B245_check_pushing forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_870(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_870; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_281(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_281; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_282(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_282; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_283(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_283; } latest_rule_result-->0 = 0; return 0; ! 4 rule(s) ]; Constant B246_carry_out_pushing = EMPTY_RULEBOOK; [ B247_report_pushing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_284(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_284; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B248_check_turning forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_285(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_285; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_286(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_286; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_287(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_287; } latest_rule_result-->0 = 0; return 0; ! 3 rule(s) ]; Constant B249_carry_out_turning = EMPTY_RULEBOOK; [ B250_report_turning forbid_breaks ! Implied call parameter rv ! return value ; rv = R_288(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_288; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B251_check_pushing_it_to forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_289(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_289; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_290(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_290; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_291(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_291; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_292(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_292; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_293(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_293; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_294(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_294; } latest_rule_result-->0 = 0; return 0; ! 6 rule(s) ]; Constant B252_carry_out_pushing_it_to = EMPTY_RULEBOOK; Constant B253_report_pushing_it_to = EMPTY_RULEBOOK; [ B254_check_squeezing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_295(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_295; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B255_carry_out_squeezing = EMPTY_RULEBOOK; [ B256_report_squeezing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_296(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_296; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B257_check_saying_yes forbid_breaks ! Implied call parameter rv ! return value ; rv = R_297(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_297; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B258_carry_out_saying_yes = EMPTY_RULEBOOK; Constant B259_report_saying_yes = EMPTY_RULEBOOK; [ B260_check_saying_no forbid_breaks ! Implied call parameter rv ! return value ; rv = R_298(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_298; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B261_carry_out_saying_no = EMPTY_RULEBOOK; Constant B262_report_saying_no = EMPTY_RULEBOOK; [ B263_check_burning forbid_breaks ! Implied call parameter rv ! return value ; rv = R_299(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_299; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B264_carry_out_burning = EMPTY_RULEBOOK; Constant B265_report_burning = EMPTY_RULEBOOK; [ B266_check_waking_up forbid_breaks ! Implied call parameter rv ! return value ; rv = R_300(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_300; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B267_carry_out_waking_up = EMPTY_RULEBOOK; Constant B268_report_waking_up = EMPTY_RULEBOOK; [ B269_check_thinking forbid_breaks ! Implied call parameter rv ! return value ; rv = R_301(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_301; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B270_carry_out_thinking = EMPTY_RULEBOOK; Constant B271_report_thinking = EMPTY_RULEBOOK; Constant B272_check_smelling = EMPTY_RULEBOOK; Constant B273_carry_out_smelling = EMPTY_RULEBOOK; [ B274_report_smelling forbid_breaks ! Implied call parameter rv ! return value ; rv = R_302(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_302; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B275_check_listening_to = EMPTY_RULEBOOK; Constant B276_carry_out_listening_to = EMPTY_RULEBOOK; [ B277_report_listening_to forbid_breaks ! Implied call parameter rv ! return value ; rv = R_303(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_303; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B278_check_tasting = EMPTY_RULEBOOK; Constant B279_carry_out_tasting = EMPTY_RULEBOOK; [ B280_report_tasting forbid_breaks ! Implied call parameter rv ! return value ; rv = R_304(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_304; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B281_check_cutting forbid_breaks ! Implied call parameter rv ! return value ; rv = R_305(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_305; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B282_carry_out_cutting = EMPTY_RULEBOOK; Constant B283_report_cutting = EMPTY_RULEBOOK; Constant B284_check_jumping = EMPTY_RULEBOOK; Constant B285_carry_out_jumping = EMPTY_RULEBOOK; [ B286_report_jumping forbid_breaks ! Implied call parameter rv ! return value ; rv = R_306(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_306; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B287_check_tying_it_to forbid_breaks ! Implied call parameter rv ! return value ; rv = R_307(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_307; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B288_carry_out_tying_it_to = EMPTY_RULEBOOK; Constant B289_report_tying_it_to = EMPTY_RULEBOOK; [ B290_check_drinking forbid_breaks ! Implied call parameter rv ! return value ; rv = R_308(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_308; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B291_carry_out_drinking = EMPTY_RULEBOOK; Constant B292_report_drinking = EMPTY_RULEBOOK; [ B293_check_saying_sorry forbid_breaks ! Implied call parameter rv ! return value ; rv = R_309(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_309; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B294_carry_out_saying_sorry = EMPTY_RULEBOOK; Constant B295_report_saying_sorry = EMPTY_RULEBOOK; [ B296_check_swinging forbid_breaks ! Implied call parameter rv ! return value ; rv = R_310(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_310; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B297_carry_out_swinging = EMPTY_RULEBOOK; Constant B298_report_swinging = EMPTY_RULEBOOK; [ B299_check_rubbing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_311(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_311; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B300_carry_out_rubbing = EMPTY_RULEBOOK; [ B301_report_rubbing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_312(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_312; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B302_check_setting_it_to forbid_breaks ! Implied call parameter rv ! return value ; rv = R_313(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_313; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B303_carry_out_setting_it_to = EMPTY_RULEBOOK; Constant B304_report_setting_it_to = EMPTY_RULEBOOK; Constant B305_check_waving_hands = EMPTY_RULEBOOK; Constant B306_carry_out_waving_hands = EMPTY_RULEBOOK; [ B307_report_waving_hands forbid_breaks ! Implied call parameter rv ! return value ; rv = R_314(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_314; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B308_check_buying forbid_breaks ! Implied call parameter rv ! return value ; rv = R_315(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_315; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B309_carry_out_buying = EMPTY_RULEBOOK; Constant B310_report_buying = EMPTY_RULEBOOK; [ B311_check_climbing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_316(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_316; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B312_carry_out_climbing = EMPTY_RULEBOOK; Constant B313_report_climbing = EMPTY_RULEBOOK; [ B314_check_sleeping forbid_breaks ! Implied call parameter rv ! return value ; rv = R_317(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_317; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B315_carry_out_sleeping = EMPTY_RULEBOOK; Constant B316_report_sleeping = EMPTY_RULEBOOK; Constant B317_check_quitting_the_game = EMPTY_RULEBOOK; [ B318_carry_out_quitting_the_ forbid_breaks ! Implied call parameter rv ! return value ; rv = QUIT_THE_GAME_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return QUIT_THE_GAME_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B319_report_quitting_the_gam = EMPTY_RULEBOOK; Constant B320_check_saving_the_game = EMPTY_RULEBOOK; [ B321_carry_out_saving_the_ga forbid_breaks ! Implied call parameter rv ! return value ; rv = SAVE_THE_GAME_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return SAVE_THE_GAME_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B322_report_saving_the_game = EMPTY_RULEBOOK; Constant B323_check_restoring_the_gam = EMPTY_RULEBOOK; [ B324_carry_out_restoring_the forbid_breaks ! Implied call parameter rv ! return value ; rv = RESTORE_THE_GAME_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return RESTORE_THE_GAME_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B325_report_restoring_the_ga = EMPTY_RULEBOOK; Constant B326_check_restarting_the_ga = EMPTY_RULEBOOK; [ B327_carry_out_restarting_th forbid_breaks ! Implied call parameter rv ! return value ; rv = RESTART_THE_GAME_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return RESTART_THE_GAME_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B328_report_restarting_the_g = EMPTY_RULEBOOK; Constant B329_check_verifying_the_sto = EMPTY_RULEBOOK; [ B330_carry_out_verifying_the forbid_breaks ! Implied call parameter rv ! return value ; rv = VERIFY_THE_STORY_FILE_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return VERIFY_THE_STORY_FILE_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B331_report_verifying_the_st = EMPTY_RULEBOOK; Constant B332_check_switching_the_sto = EMPTY_RULEBOOK; [ B333_carry_out_switching_the forbid_breaks ! Implied call parameter rv ! return value ; rv = SWITCH_TRANSCRIPT_ON_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return SWITCH_TRANSCRIPT_ON_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B334_report_switching_the_st = EMPTY_RULEBOOK; Constant B335_check_switching_the_sto = EMPTY_RULEBOOK; [ B336_carry_out_switching_the forbid_breaks ! Implied call parameter rv ! return value ; rv = SWITCH_TRANSCRIPT_OFF_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return SWITCH_TRANSCRIPT_OFF_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B337_report_switching_the_st = EMPTY_RULEBOOK; Constant B338_check_requesting_the_st = EMPTY_RULEBOOK; [ B339_carry_out_requesting_th forbid_breaks ! Implied call parameter rv ! return value ; rv = ANNOUNCE_STORY_FILE_VERSION_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ANNOUNCE_STORY_FILE_VERSION_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B340_report_requesting_the_s = EMPTY_RULEBOOK; Constant B341_check_requesting_the_sc = EMPTY_RULEBOOK; [ B342_carry_out_requesting_th forbid_breaks ! Implied call parameter rv ! return value ; rv = ANNOUNCE_SCORE_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ANNOUNCE_SCORE_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B343_report_requesting_the_s = EMPTY_RULEBOOK; Constant B344_check_preferring_abbrev = EMPTY_RULEBOOK; [ B345_carry_out_preferring_ab forbid_breaks ! Implied call parameter rv ! return value ; rv = PREFER_ABBREVIATED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return PREFER_ABBREVIATED_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B346_report_preferring_abbre forbid_breaks ! Implied call parameter rv ! return value ; rv = REP_PREFER_ABBREVIATED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return REP_PREFER_ABBREVIATED_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B347_check_preferring_unabbr = EMPTY_RULEBOOK; [ B348_carry_out_preferring_un forbid_breaks ! Implied call parameter rv ! return value ; rv = PREFER_UNABBREVIATED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return PREFER_UNABBREVIATED_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B349_report_preferring_unabb forbid_breaks ! Implied call parameter rv ! return value ; rv = REP_PREFER_UNABBREVIATED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return REP_PREFER_UNABBREVIATED_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B350_check_preferring_someti = EMPTY_RULEBOOK; [ B351_carry_out_preferring_so forbid_breaks ! Implied call parameter rv ! return value ; rv = PREFER_SOMETIMES_ABBREVIATED_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return PREFER_SOMETIMES_ABBREVIATED_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B352_report_preferring_somet forbid_breaks ! Implied call parameter rv ! return value ; rv = REP_PREFER_SOMETIMES_ABBR_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return REP_PREFER_SOMETIMES_ABBR_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B353_check_switching_score_n = EMPTY_RULEBOOK; [ B354_carry_out_switching_sco forbid_breaks ! Implied call parameter rv ! return value ; rv = SWITCH_SCORE_NOTIFY_ON_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return SWITCH_SCORE_NOTIFY_ON_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B355_report_switching_score_ forbid_breaks ! Implied call parameter rv ! return value ; rv = REP_SWITCH_NOTIFY_ON_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return REP_SWITCH_NOTIFY_ON_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B356_check_switching_score_n = EMPTY_RULEBOOK; [ B357_carry_out_switching_sco forbid_breaks ! Implied call parameter rv ! return value ; rv = SWITCH_SCORE_NOTIFY_OFF_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return SWITCH_SCORE_NOTIFY_OFF_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B358_report_switching_score_ forbid_breaks ! Implied call parameter rv ! return value ; rv = REP_SWITCH_NOTIFY_OFF_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return REP_SWITCH_NOTIFY_OFF_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B359_check_requesting_the_pr = EMPTY_RULEBOOK; [ B360_carry_out_requesting_th forbid_breaks ! Implied call parameter rv ! return value ; rv = ANNOUNCE_PRONOUN_MEANINGS_R(); if (rv) { if (rv == 2) return reason_the_action_failed; return ANNOUNCE_PRONOUN_MEANINGS_R; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B361_report_requesting_the_p = EMPTY_RULEBOOK; Constant B362_before_pausing_the_game = EMPTY_RULEBOOK; [ B363_for_pausing_the_game forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_805(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_805; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B364_after_pausing_the_game = EMPTY_RULEBOOK; Constant B365_before_refusing_keys = EMPTY_RULEBOOK; [ B366_for_refusing_keys forbid_breaks ! Implied call parameter rv ! return value p ! rulebook parameter ; p = parameter_value; parameter_value = p; rv = R_827(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_827; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B367_after_refusing_keys = EMPTY_RULEBOOK; [ B368_check_unlocking_keyless forbid_breaks ! Implied call parameter rv ! return value ; rv = R_831(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_831; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B369_carry_out_unlocking_key forbid_breaks ! Implied call parameter rv ! return value ; rv = R_832(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_832; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B370_report_unlocking_keyles = EMPTY_RULEBOOK; [ B371_check_locking_keylessly forbid_breaks ! Implied call parameter rv ! return value ; rv = R_834(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_834; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; [ B372_carry_out_locking_keyle forbid_breaks ! Implied call parameter rv ! return value ; rv = R_835(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_835; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B373_report_locking_keylessl = EMPTY_RULEBOOK; Constant B374_when_mystery_begins = EMPTY_RULEBOOK; Constant B375_when_mystery_ends = EMPTY_RULEBOOK; Constant B376_check_escaping = EMPTY_RULEBOOK; Constant B377_carry_out_escaping = EMPTY_RULEBOOK; Constant B378_report_escaping = EMPTY_RULEBOOK; Constant B379_check_typing = EMPTY_RULEBOOK; Constant B380_carry_out_typing = EMPTY_RULEBOOK; [ B381_report_typing forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_871(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_871; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_872(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_872; } latest_rule_result-->0 = 0; return 0; ! 2 rule(s) ]; [ B382_check_unscrewing forbid_breaks ! Implied call parameter rv ! return value ; rv = R_884(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_884; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B383_carry_out_unscrewing = EMPTY_RULEBOOK; Constant B384_report_unscrewing = EMPTY_RULEBOOK; [ B385_when_discovery_begins forbid_breaks ! Implied call parameter rv ! return value ; rv = R_887(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_887; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B386_when_discovery_ends = EMPTY_RULEBOOK; Constant B387_check_helping = EMPTY_RULEBOOK; [ B388_carry_out_helping forbid_breaks ! Implied call parameter rv ! return value ; rv = R_912(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_912; } latest_rule_result-->0 = 0; return 0; ! 1 rule(s) ]; Constant B389_report_helping = EMPTY_RULEBOOK; Constant B390_check_hinting = EMPTY_RULEBOOK; [ B391_carry_out_hinting forbid_breaks ! Implied call parameter rv ! return value original_deadflag ! saved state ; original_deadflag = deadflag; rv = R_913(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_913; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_914(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_914; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_915(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_915; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_916(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_916; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_917(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_917; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_918(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_918; } latest_rule_result-->0 = 0; if (original_deadflag ~= deadflag) return 0; if (say__p) RulebookParBreak(forbid_breaks); rv = R_919(); if (rv) { if (rv == 2) return reason_the_action_failed; return R_919; } latest_rule_result-->0 = 0; return 0; ! 7 rule(s) ]; Constant B392_report_hinting = EMPTY_RULEBOOK; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Scenes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DetectSceneChange chs ! count of changes made ch ! flag: change made ; if (scene_status-->0 == 1) { if ((((deadflag~=0)))) { ch = true; if (debug_scenes) print "[Scene 'Entire Game' ends]^"; if (GProperty(43, 1, p57_recurring)) scene_status-->0 = 0; else scene_status-->0 = 2; FollowRulebook(28); FollowRulebook(WHEN_SCENE_ENDS_RB, 1); scene_ended-->0 = the_time; scene_endings-->0 = (scene_endings-->0)|2; scene_latest_ending-->0 = 1; jump CScene; } } if (scene_status-->0 == 0) { if ((((deadflag==0)))) { ch = true; if (debug_scenes) print "[Scene 'Entire Game' begins]^"; scene_status-->0 = 1; FollowRulebook(WHEN_SCENE_BEGINS_RB, 1); FollowRulebook(27); scene_started-->0 = the_time; scene_endings-->0 = (scene_endings-->0)|1; scene_latest_ending-->0 = 0; jump CScene; } } if (scene_status-->1 == 1) { if ((((I168_testing_area == ContainerOf(player))))) { ch = true; if (debug_scenes) print "[Scene 'Mystery' ends]^"; if (GProperty(43, 2, p57_recurring)) scene_status-->1 = 0; else scene_status-->1 = 2; FollowRulebook(375); FollowRulebook(WHEN_SCENE_ENDS_RB, 2); scene_ended-->1 = the_time; scene_endings-->1 = (scene_endings-->1)|2; scene_latest_ending-->1 = 1; jump CScene; } } if (scene_status-->1 == 0) { if (((scene_endings-->1) & 1) == 0) { if (debug_scenes) print "[Scene 'Mystery' begins]^"; scene_status-->1 = 1; FollowRulebook(WHEN_SCENE_BEGINS_RB, 2); FollowRulebook(374); scene_started-->1 = the_time; scene_endings-->1 = (scene_endings-->1)|1; scene_latest_ending-->1 = 0; } } if (scene_status-->2 == 1) { } if (scene_status-->2 == 0) { if ((((I168_testing_area == ContainerOf(player))))) { ch = true; if (debug_scenes) print "[Scene 'Discovery' begins]^"; scene_status-->2 = 1; FollowRulebook(WHEN_SCENE_BEGINS_RB, 3); FollowRulebook(385); scene_started-->2 = the_time; scene_endings-->2 = (scene_endings-->2)|1; scene_latest_ending-->2 = 0; jump CScene; } } .CScene; if (chs>20) ">--> The scene change machinery is stuck."; if (ch>0) DetectSceneChange(++chs); rfalse; ]; #IFDEF DEBUG; [ ShowSceneStatus chs ! internal use only sc ! internal use only ch ! internal use only ; if (scene_status-->0 == 1) { print "Scene 'Entire Game' playing (for ", the_time-(scene_started-->0), " mins now)^"; } else { if (scene_latest_ending-->0 > 0) { print "Scene 'Entire Game' ended"; print "^"; } } if (scene_status-->1 == 1) { print "Scene 'Mystery' playing (for ", the_time-(scene_started-->1), " mins now)^"; } else { if (scene_latest_ending-->1 > 0) { print "Scene 'Mystery' ended"; print "^"; } } if (scene_status-->2 == 1) { print "Scene 'Discovery' playing (for ", the_time-(scene_started-->2), " mins now)^"; } else { if (scene_latest_ending-->2 > 0) { print "Scene 'Discovery' ended"; print "^"; } } ]; #ENDIF; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: The New Library ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Summary ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Action Data ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant AD_ACTION = 0; ! The I6 action number (0 to 4095) Constant AD_REQUIREMENTS = 1; ! Such as requiring light; a bitmap, see below Constant AD_NOUN_KOV = 2; ! Kind of value of the first noun Constant AD_SECOND_KOV = 3; ! Kind of value of the second noun Constant AD_VARIABLES_CREATOR = 4; ! Routine to initialise variables owned Constant AD_VARIABLES_ID = 5; ! Frame ID for variables owned by action Constant AD_RECORD_SIZE = 6; [ FindAction fa t; if (fa == -1) fa = action; t = 1; while (t <= ActionData-->0) { if (fa == ActionData-->t) return t; t = t + AD_RECORD_SIZE; } rfalse; ]; [ ActionNumberIndexed i; if ((i>=0) && (i < AD_RECORDS)) return ActionData-->(i*AD_RECORD_SIZE + AD_ACTION + 1); return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Requirements Bitmap ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant TOUCH_NOUN_ABIT = $$00000001; Constant TOUCH_SECOND_ABIT = $$00000010; Constant LIGHT_ABIT = $$00000100; Constant NEED_NOUN_ABIT = $$00001000; Constant NEED_SECOND_ABIT = $$00010000; Constant OUT_OF_WORLD_ABIT = $$00100000; Constant CARRY_NOUN_ABIT = $$01000000; Constant CARRY_SECOND_ABIT = $$10000000; [ NeedToCarryNoun; return TestActionMask(CARRY_NOUN_ABIT); ]; [ NeedToCarrySecondNoun; return TestActionMask(CARRY_SECOND_ABIT); ]; [ NeedToTouchNoun; return TestActionMask(TOUCH_NOUN_ABIT); ]; [ NeedToTouchSecondNoun; return TestActionMask(TOUCH_SECOND_ABIT); ]; [ NeedLightForAction; return TestActionMask(LIGHT_ABIT); ]; [ TestActionMask match mask at; at = FindAction(-1); if (at == 0) rfalse; mask = ActionData-->(at+AD_REQUIREMENTS); if (mask & match) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Try Action ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TryAction req by ac n s stora smeta tbits saved_command text_of_command; if (stora) return STORED_ACTION_TY_New(ac, n, s, by, req, stora); tbits = req & (16+32); req = req & 1; @push actor; @push act_requester; @push inp1; @push inp2; @push parsed_number; smeta = meta; actor = by; if (req) act_requester = player; else act_requester = 0; by = FindAction(ac); if (by) { if (ActionData-->(by+AD_NOUN_KOV) == OBJECT_TY) inp1 = n; else { inp1 = 1; parsed_number = n; } if (ActionData-->(by+AD_SECOND_KOV) == OBJECT_TY) inp2 = s; else { inp2 = 1; parsed_number = s; } if (((ActionData-->(by+AD_NOUN_KOV) == UNDERSTANDING_TY) || (ActionData-->(by+AD_SECOND_KOV) == UNDERSTANDING_TY)) && (tbits)) { saved_command = BlkValueCreate(TEXT_TY); BlkValueCast(saved_command, SNIPPET_TY, players_command); text_of_command = BlkValueCreate(TEXT_TY); BlkValueCopy(text_of_command, parsed_number); SetPlayersCommand(text_of_command); if (tbits == 16) { n = players_command; inp1 = 1; parsed_number = players_command; } else { s = players_command; inp2 = 1; parsed_number = players_command; } BlkValueFree(text_of_command); @push consult_from; @push consult_words; consult_from = 1; consult_words = parsed_number - 100; } } BeginAction(ac, n, s, 0, true); if (saved_command) { @pull consult_words; @pull consult_from; SetPlayersCommand(saved_command); BlkValueFree(saved_command); } meta = smeta; @pull parsed_number; @pull inp2; @pull inp1; @pull act_requester; @pull actor; TrackActions(true, smeta); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: I6 Angle Brackets ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ R_Process a i j; @push inp1; @push inp2; inp1 = i; inp2 = j; BeginAction(a, i, j); @pull inp2; @pull inp1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Conversion ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global converted_action_outcome = -1; [ GVS_Convert ac n s; converted_action_outcome = BeginAction(ac, n, s); if (converted_action_outcome == true) FollowRulebook( 23, nothing, true ); rtrue; ]; [ ConvertToRequest X AN Y Z; WORK_OUT_DETAILS_OF_SPECIFIC_R(); if (X == player) TryAction(false, X, AN, Y, Z); else TryAction(true, X, AN, Y, Z); rtrue; ]; [ ConvertToGoingWithPush i oldrm newrm infl; i=noun; if (IndirectlyContains(noun, actor) == false) { move i to actor; infl = true; } move_pushing = i; oldrm = LocationOf(noun); BeginAction(##Go, second); newrm = LocationOf(actor); move_pushing = nothing; move i to newrm; if (newrm ~= oldrm) { if (IndirectlyContains(i, player)) TryAction(0, player, ##Look, 0, 0); RulebookSucceeds(); } else RulebookFails(); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Implicit Take ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ImplicitTake obj ks; if (actor == player) { STANDARD_IMPLICIT_TAKING_RM('A', obj); } else { if (TestVisibility(player, actor)) STANDARD_IMPLICIT_TAKING_RM('B', obj, actor); } ClearParagraphing(3); @push keep_silent; keep_silent = true; @push say__p; @push say__pc; ClearParagraphing(4); if (act_requester) TryAction(true, actor, ##Take, obj, nothing); else TryAction(false, actor, ##Take, obj, nothing); DivideParagraphPoint(); @pull say__pc; @pull say__p; AdjustParagraphPoint(); @pull keep_silent; if (obj in actor) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Look After Going ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LookAfterGoing; GoingLookBreak(); AbbreviatedRoomDescription(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Abbreviated Room Description ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ AbbreviatedRoomDescription prior_action pos frame_id; prior_action = action; action = ##Look; pos = FindAction(##Look); if ((pos) && (ActionData-->(pos+AD_VARIABLES_CREATOR))) { frame_id = ActionData-->(pos+AD_VARIABLES_ID); Mstack_Create_Frame(ActionData-->(pos+AD_VARIABLES_CREATOR), frame_id); FollowRulebook(SETTING_ACTION_VARIABLES_RB); (MStack-->MstVO(frame_id, 0)) = prior_action; ! "room-describing action" (MStack-->MstVO(frame_id, 1)) = true; ! "abbreviated form allowed" } LookSub(); ! The I6 verb routine for "looking" if (frame_id) Mstack_Destroy_Frame(ActionData-->(pos+AD_VARIABLES_CREATOR), frame_id); action = prior_action; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Begin Action ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BeginAction a n s moi notrack rv; ChronologyPoint(); @push action; @push noun; @push second; @push self; @push multiple_object_item; action = a; noun = n; second = s; self = noun; multiple_object_item = moi; if (action < 4096) rv = ActionPrimitive(); @pull multiple_object_item; @pull self; @pull second; @pull noun; @pull action; if (notrack == false) TrackActions(true, meta); return rv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Action Primitive ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ActionPrimitive rv p1 p2 p3 p4 p5 frame_id; MStack_CreateRBVars(ACTION_PROCESSING_RB); if ((keep_silent == false) && (multiflag == false)) DivideParagraphPoint(); reason_the_action_failed = 0; frame_id = -1; p1 = FindAction(action); if ((p1) && (ActionData-->(p1+AD_VARIABLES_CREATOR))) { frame_id = ActionData-->(p1+AD_VARIABLES_ID); Mstack_Create_Frame(ActionData-->(p1+AD_VARIABLES_CREATOR), frame_id); } if (ActionVariablesNotTypeSafe()) { if (actor ~= player) { ACTION_PROCESSING_INTERNAL_RM('K'); new_line; } if (frame_id ~= -1) Mstack_Destroy_Frame(ActionData-->(p1+AD_VARIABLES_CREATOR), frame_id); MStack_DestroyRBVars(ACTION_PROCESSING_RB); return; } FollowRulebook(SETTING_ACTION_VARIABLES_RB); #IFDEF DEBUG; if ((trace_actions) && (FindAction(-1))) { print "["; p1=actor; p2=act_requester; p3=action; p4=noun; p5=second; DB_Action(p1,p2,p3,p4,p5); print "]^"; ClearParagraphing(5); } ++debug_rule_nesting; #ENDIF; TrackActions(false, meta); if ((meta) && (actor ~= player)) { ACTION_PROCESSING_INTERNAL_RM('A', actor); new_line; rv = RS_FAILS; } else if (meta) { DESCEND_TO_SPECIFIC_ACTION_R(); rv = RulebookOutcome(); } else { FollowRulebook(ACTION_PROCESSING_RB); rv = RulebookOutcome(); } #IFDEF DEBUG; --debug_rule_nesting; if ((trace_actions) && (FindAction(-1))) { print "["; DB_Action(p1,p2,p3,p4,p5); print " - "; switch (rv) { RS_SUCCEEDS: print "succeeded"; RS_FAILS: print "failed"; #IFNDEF MEMORY_ECONOMY; if (reason_the_action_failed) print " the ", (RulePrintingRule) reason_the_action_failed; #ENDIF; default: print "ended without result"; } print "]^"; say__p = 1; SetRulebookOutcome(rv); ! In case disturbed by printing activities } #ENDIF; if (rv == RS_SUCCEEDS) UpdateActionBitmap(); if (frame_id ~= -1) { p1 = FindAction(action); Mstack_Destroy_Frame(ActionData-->(p1+AD_VARIABLES_CREATOR), frame_id); } MStack_DestroyRBVars(ACTION_PROCESSING_RB); if ((keep_silent == false) && (multiflag == false)) DivideParagraphPoint(); if (rv == RS_SUCCEEDS) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Internal Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ACTION_PROCESSING_INTERNAL_R; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Type Safety ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ActionVariablesNotTypeSafe mask noun_kova second_kova at; at = FindAction(-1); if (at == 0) rfalse; ! For any I6-defined actions noun_kova = ActionData-->(at+AD_NOUN_KOV); second_kova = ActionData-->(at+AD_SECOND_KOV); !print "at = ", at, " nst = ", noun_kova, "^"; !print "consult_from = ", consult_from, " consult_words = ", consult_from, "^"; !print "inp1 = ", inp1, " noun = ", noun, "^"; !print "inp2 = ", inp2, " second = ", second, "^"; !print "sst = ", second_kova, "^"; if (noun_kova == SNIPPET_TY or UNDERSTANDING_TY) { if (inp1 ~= 1) { inp2 = inp1; second = noun; } parsed_number = 100*consult_from + consult_words; inp1 = 1; noun = nothing; ! noun = parsed_number; } if (second_kova == SNIPPET_TY or UNDERSTANDING_TY) { parsed_number = 100*consult_from + consult_words; inp2 = 1; second = nothing; ! second = parsed_number; } mask = ActionData-->(at+AD_REQUIREMENTS); if (mask & OUT_OF_WORLD_ABIT) { meta = 1; rfalse; } meta = 0; if (inp1 == 1) { if (noun_kova == OBJECT_TY) { if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('B'); new_line; } rtrue; } } else { if (noun_kova ~= OBJECT_TY) { if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('C'); new_line; } rtrue; } if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { @push act_requester; act_requester = nothing; CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); @pull act_requester; if (noun == nothing) { if (say__p) rtrue; if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } rtrue; } } if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } rtrue; } } if (inp2 == 1) { if (second_kova == OBJECT_TY) { if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('F'); new_line; } rtrue; } } else { if (second_kova ~= OBJECT_TY) { if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('G'); new_line; } rtrue; } if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { @push act_requester; act_requester = nothing; CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); @pull act_requester; if (second == nothing) { if (say__p) rtrue; if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('H'); new_line; } rtrue; } } if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('I'); new_line; } rtrue; } } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Basic Visibility Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BASIC_VISIBILITY_R; if (act_requester) rfalse; if ((NeedLightForAction()) && (actor == player) && (FollowRulebook(VISIBLE_RB)) && (RulebookSucceeded())) { BeginActivity(REFUSAL_TO_ACT_IN_DARK_ACT); if (ForActivity(REFUSAL_TO_ACT_IN_DARK_ACT)==false) { BASIC_VISIBILITY_RM('A'); new_line; } EndActivity(REFUSAL_TO_ACT_IN_DARK_ACT); reason_the_action_failed = BASIC_VISIBILITY_R; RulebookFails(); rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Basic Accessibility Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BASIC_ACCESSIBILITY_R mask at; if (act_requester) rfalse; at = FindAction(-1); if (at == 0) rfalse; mask = ActionData-->(at+AD_REQUIREMENTS); if ((mask & TOUCH_NOUN_ABIT) && noun && (inp1 ~= 1)) { if (noun ofclass K3_direction) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; if (actor~=player) rtrue; BASIC_ACCESSIBILITY_RM('A'); new_line; RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; rtrue; } if (ObjectIsUntouchable(noun, (actor~=player), actor)) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; rtrue; } } if ((mask & TOUCH_SECOND_ABIT) && second && (inp2 ~= 1)) { if (second ofclass K3_direction) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; if (actor~=player) rtrue; BASIC_ACCESSIBILITY_RM('A'); new_line; RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; rtrue; } if (ObjectIsUntouchable(second, (actor~=player), actor)) { RulebookFails(); reason_the_action_failed = BASIC_ACCESSIBILITY_R; rtrue; } } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Carrying Requirements Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CARRYING_REQUIREMENTS_R mask at; at = FindAction(-1); if (at == 0) rfalse; mask = ActionData-->(at+AD_REQUIREMENTS); if ((mask & TOUCH_NOUN_ABIT) && noun && (inp1 ~= 1)) { if ((mask & CARRY_NOUN_ABIT) && (noun notin actor)) { CarryOutActivity(IMPLICITLY_TAKING_ACT, noun); if (noun notin actor) { RulebookFails(); reason_the_action_failed = CARRYING_REQUIREMENTS_R; rtrue; } } } if ((mask & TOUCH_SECOND_ABIT) && second && (inp2 ~= 1)) { if ((mask & CARRY_SECOND_ABIT) && (second notin actor)) { CarryOutActivity(IMPLICITLY_TAKING_ACT, second); if (second notin actor) { RulebookFails(); reason_the_action_failed = CARRYING_REQUIREMENTS_R; rtrue; } } } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Standard Implicit Taking Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STANDARD_IMPLICIT_TAKING_R; ImplicitTake(parameter_value); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Requested Actions Require Persuasion Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ REQUESTED_ACTIONS_REQUIRE_R rv; if ((actor ~= player) && (act_requester)) { @push say__p; say__p = 0; rv = FollowRulebook(PERSUADE_RB); if (RulebookSucceeded() == false) { if ((deadflag == false) && (say__p == FALSE)) { REQUESTED_ACTIONS_REQUIRE_RM('A', actor); new_line; } ActRulebookFails(rv); rtrue; } @pull say__p; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Carry Out Requested Actions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CARRY_OUT_REQUESTED_ACTIONS_R rv; if ((actor ~= player) && (act_requester)) { @push act_requester; act_requester = nothing; rv = BeginAction(action, noun, second); if (((meta) || (rv == false)) && (deadflag == false)) { if (FollowRulebook(UNSUCCESSFUL_ATTEMPT_RB) == false) { CARRY_OUT_REQUESTED_ACTIONS_RM('A', actor); new_line; } } @pull act_requester; FollowRulebook(AFTER_RB); ActRulebookSucceeds(); rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Generic Verb Subroutine ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array Details_of_Specific_Action-->5; [ GenericVerbSub ch co re vis rv; @push converted_action_outcome; converted_action_outcome = -1; Details_of_Specific_Action-->0 = true; if (meta) Details_of_Specific_Action-->0 = false; Details_of_Specific_Action-->1 = keep_silent; Details_of_Specific_Action-->2 = ch; ! Check rules for the action Details_of_Specific_Action-->3 = co; ! Carry out rules for the action Details_of_Specific_Action-->4 = re; ! Report rules for the action FollowRulebook(SPECIFIC_ACTION_PROCESSING_RB, 0, true); if ((RulebookFailed()) && (converted_action_outcome == 1)) ActRulebookSucceeds(); @pull converted_action_outcome; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Work Out Details Of Specific Action Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WORK_OUT_DETAILS_OF_SPECIFIC_R; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 0) = Details_of_Specific_Action-->0; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 1) = Details_of_Specific_Action-->1; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 2) = Details_of_Specific_Action-->2; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 3) = Details_of_Specific_Action-->3; MStack-->MstVO(SPECIFIC_ACTION_PROCESSING_RB, 4) = Details_of_Specific_Action-->4; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Actions Bitmap ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestActionBitmap obj act i j k bitmap; if (obj == nothing) bitmap = ActionHappened; else { if (~~(obj provides action_bitmap)) rfalse; bitmap = obj.&action_bitmap; } if (act == -1) return (((bitmap->0) & 1) ~= 0); for (i=0, k=2: ii) { return (((bitmap->j) & k) ~= 0); } k = k*2; if (k == 256) { k = 1; j++; } } rfalse; ]; [ UpdateActionBitmap; SetActionBitmap(noun, action); if (action == ##Go) SetActionBitmap(location, ##Enter); ]; [ SetActionBitmap obj act i j k bitmap; for (i=0, k=2: ii) { if (obj provides action_bitmap) { bitmap = obj.&action_bitmap; bitmap->0 = (bitmap->0) | 1; bitmap->j = (bitmap->j) | k; } ActionHappened->0 = (ActionHappened->0) | 1; ActionHappened->j = (ActionHappened->j) | k; } k = k*2; if (k == 256) { k = 1; j++; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Actions.i6t: Printing Actions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SayActionName act; DB_Action(0, 0, act, 0, 0, 2); ]; [ DA_Name n; if (n ofclass K3_direction) print (name) n; else print (the) n; ]; [ DA_Topic x a b c d i cf cw; cw = x%100; cf = x/100; print "~"; for (a=cf:di; } if (d 0)) print "(", debug_rule_nesting, ") "; if ((ac ~= player) && (for_say ~= 2)) { if (acr) print "asking ", (the) ac, " to try "; else print (the) ac, " "; } DB_Action_Details(act, n, s, for_say); if ((keep_silent) && (for_say == 0)) print " - silently"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: The Activities Stack ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant MAX_NESTED_ACTIVITIES = 20; Global activities_sp = 0; Array activities_stack --> MAX_NESTED_ACTIVITIES; Array activity_parameters_stack --> MAX_NESTED_ACTIVITIES; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: Rule Debugging Inhibition ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global inhibit_flag = 0; Global saved_debug_rules = 0; [ FixInhibitFlag n act inhibit_rule_debugging; for (n=0:nn; if (act == PRINTING_THE_NAME_ACT or PRINTING_THE_PLURAL_NAME_ACT or PRINTING_ROOM_DESC_DETAILS_ACT or PRINTING_INVENTORY_DETAILS_ACT or LISTING_CONTENTS_ACT or GROUPING_TOGETHER_ACT or PRINTING_RESPONSE_ACT) inhibit_rule_debugging = true; } if ((inhibit_flag == false) && (inhibit_rule_debugging)) { saved_debug_rules = debug_rules; debug_rules = 0; } if ((inhibit_flag) && (inhibit_rule_debugging == false)) { debug_rules = saved_debug_rules; } inhibit_flag = inhibit_rule_debugging; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: Testing Activities ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestActivity A desc val i; for (i=0:ii == A) { if (desc) { if ((desc)(activity_parameters_stack-->i)) rtrue; } else if (val) { if (val == activity_parameters_stack-->i) rtrue; } else rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: Emptiness ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ActivityEmpty A x; x = Activity_before_rulebooks-->A; if (rulebooks_array-->x ~= EMPTY_RULEBOOK) rfalse; x = Activity_for_rulebooks-->A; if (rulebooks_array-->x ~= EMPTY_RULEBOOK) rfalse; x = Activity_after_rulebooks-->A; if (rulebooks_array-->x ~= EMPTY_RULEBOOK) rfalse; rtrue; ]; [ RulebookEmpty rb; if (rulebooks_array-->rb ~= EMPTY_RULEBOOK) rfalse; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: Process Activity Rulebook ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ProcessActivityRulebook rulebook parameter rv; @push self; if (parameter) self = parameter; rv = FollowRulebook(rulebook, parameter, true); @pull self; if (rv) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: Carrying Out Activities ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CarryOutActivity A o rv; BeginActivity(A, o); rv = ForActivity(A, o); EndActivity(A, o); return rv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: Begin ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BeginActivity A o x; if (activities_sp == MAX_NESTED_ACTIVITIES) return RunTimeProblem(RTP_TOOMANYACTS); activity_parameters_stack-->activities_sp = o; activities_stack-->(activities_sp++) = A; FixInhibitFlag(); MStack_CreateAVVars(A); if (Activity_atb_rulebooks->A) { x = action; action = action_to_be; } o = ProcessActivityRulebook(Activity_before_rulebooks-->A, o); if (Activity_atb_rulebooks->A) action = x; return o; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: For ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ForActivity A o x; if (Activity_atb_rulebooks->A) { x = action; action = action_to_be; } o = ProcessActivityRulebook(Activity_for_rulebooks-->A, o); if (Activity_atb_rulebooks->A) action = x; return o; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: End ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ EndActivity A o rv x; if ((activities_sp > 0) && (activities_stack-->(activities_sp-1) == A)) { if (Activity_atb_rulebooks->A) { x = action; action = action_to_be; } rv = ProcessActivityRulebook(Activity_after_rulebooks-->A, o); if (Activity_atb_rulebooks->A) action = x; activities_sp--; FixInhibitFlag(); MStack_DestroyAVVars(A); return rv; } return RunTimeProblem(RTP_CANTABANDON); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Activities.i6t: Abandon ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ AbandonActivity A o; if ((activities_sp > 0) && (activities_stack-->(activities_sp-1) == A)) { activities_sp--; FixInhibitFlag(); MStack_DestroyAVVars(A); return; } return RunTimeProblem(RTP_CANTEND); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Figures.i6t: Resource Usage ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array ResourceUsageFlags -> (1+0+5); ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Figures.i6t: Figures ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DisplayFigure resource_ID one_time; if ((one_time) && (ResourceUsageFlags->resource_ID)) return; ResourceUsageFlags->resource_ID = true; print "^"; VM_Picture(resource_ID); print "^"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Figures.i6t: Sound Effects ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PlaySound resource_ID one_time; if (resource_ID == 0) return; ! The "silence" non-sound effect if ((one_time) && (ResourceUsageFlags->resource_ID)) return; ResourceUsageFlags->resource_ID = true; VM_SoundEffect(resource_ID); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Language ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF PLUGIN_FILES; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Structure ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant AUXF_MAGIC = 0; ! First word holds a safety constant Constant AUXF_MAGIC_VALUE = 16339; ! Should be first word of any valid file structure Constant AUXF_STATUS = 1; ! One of the following: Constant AUXF_STATUS_IS_CLOSED = 1; ! Currently closed, or perhaps doesn't exist Constant AUXF_STATUS_IS_OPEN_FOR_READ = 2; Constant AUXF_STATUS_IS_OPEN_FOR_WRITE = 3; Constant AUXF_STATUS_IS_OPEN_FOR_APPEND = 4; Constant AUXF_BINARY = 2; ! False for text files (I7 default), true for binary Constant AUXF_STREAM = 3; ! Stream for an open file (meaningless otherwise) Constant AUXF_FILENAME = 4; ! Packed address of constant string Constant AUXF_IFID_OF_OWNER = 5; ! UUID_ARRAY if owned by this project, or ! string array of IFID of owner wrapped in //...//, or NULL to leave open ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Instances ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant NO_EXTERNAL_FILES 0; Array TableOfExternalFiles --> 0 0; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Errors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_Error extf err_text struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) { print "^*** Error on unknown file: ", (string) err_text, " ***^"; } else { struc = TableOfExternalFiles-->extf; print "^*** Error on file '", (string) struc-->AUXF_FILENAME, "': ", (string) err_text, " ***^"; } RunTimeProblem(RTP_FILEIOERROR); return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Glulx Material ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF TARGET_GLULX; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Existence ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_Exists extf fref struc rv usage; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) rfalse; struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); rv = glk_fileref_does_file_exist(fref); glk_fileref_destroy(fref); return rv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Readiness ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_Ready extf struc fref usage str ch; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) rfalse; struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (glk_fileref_does_file_exist(fref) == false) { glk_fileref_destroy(fref); rfalse; } str = glk_stream_open_file(fref, filemode_Read, 0); ch = glk_get_char_stream(str); glk_stream_close(str, 0); glk_fileref_destroy(fref); if (ch ~= '*') rfalse; rtrue; ]; [ FileIO_MarkReady extf readiness struc fref str ch usage; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to open a non-file"); struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (glk_fileref_does_file_exist(fref) == false) { glk_fileref_destroy(fref); return FileIO_Error(extf, "only existing files can be marked"); } if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_CLOSED) { glk_fileref_destroy(fref); return FileIO_Error(extf, "only closed files can be marked"); } str = glk_stream_open_file(fref, filemode_ReadWrite, 0); glk_stream_set_position(str, 0, 0); ! seek start if (readiness) ch = '*'; else ch = '-'; glk_put_char_stream(str, ch); ! mark as complete glk_stream_close(str, 0); glk_fileref_destroy(fref); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Open File ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_Open extf write_flag append_flag struc fref str mode ix ch not_this_ifid owner force_header usage; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to open a non-file"); struc = TableOfExternalFiles-->extf; if ((struc == 0) || (struc-->AUXF_MAGIC ~= AUXF_MAGIC_VALUE)) rfalse; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_CLOSED) return FileIO_Error(extf, "tried to open a file already open"); if (struc-->AUXF_BINARY) usage = fileusage_BinaryMode; else usage = fileusage_TextMode; fref = glk_fileref_create_by_name(fileusage_Data + usage, Glulx_ChangeAnyToCString(struc-->AUXF_FILENAME), 0); if (write_flag) { if (append_flag) { mode = filemode_WriteAppend; if (glk_fileref_does_file_exist(fref) == false) force_header = true; } else mode = filemode_Write; } else { mode = filemode_Read; if (glk_fileref_does_file_exist(fref) == false) { glk_fileref_destroy(fref); return FileIO_Error(extf, "tried to open a file which does not exist"); } } str = glk_stream_open_file(fref, mode, 0); glk_fileref_destroy(fref); if (str == 0) return FileIO_Error(extf, "tried to open a file but failed"); struc-->AUXF_STREAM = str; if (write_flag) { if (append_flag) struc-->AUXF_STATUS = AUXF_STATUS_IS_OPEN_FOR_APPEND; else struc-->AUXF_STATUS = AUXF_STATUS_IS_OPEN_FOR_WRITE; glk_stream_set_current(str); if ((append_flag == FALSE) || (force_header)) { print "- "; for (ix=6: ix <= UUID_ARRAY->0: ix++) print (char) UUID_ARRAY->ix; print " ", (string) struc-->AUXF_FILENAME, "^"; } } else { struc-->AUXF_STATUS = AUXF_STATUS_IS_OPEN_FOR_READ; ch = FileIO_GetC(extf); if (ch ~= '-' or '*') { jump BadFile; } if (ch == '-') return FileIO_Error(extf, "tried to open a file which was incomplete"); ch = FileIO_GetC(extf); if (ch ~= ' ') { jump BadFile; } ch = FileIO_GetC(extf); if (ch ~= '/') { jump BadFile; } ch = FileIO_GetC(extf); if (ch ~= '/') { jump BadFile; } owner = struc-->AUXF_IFID_OF_OWNER; ix = 3; if (owner == UUID_ARRAY) ix = 8; if (owner ~= NULL) { for (: ix <= owner->0: ix++) { ch = FileIO_GetC(extf); if (ch == -1) { jump BadFile; } if (ch ~= owner->ix) not_this_ifid = true; if (ch == ' ') break; } if (not_this_ifid == false) { ch = FileIO_GetC(extf); if (ch ~= ' ') { jump BadFile; } } } while (ch ~= -1) { ch = FileIO_GetC(extf); if (ch == 10 or 13) break; } if (not_this_ifid) { struc-->AUXF_STATUS = AUXF_STATUS_IS_CLOSED; glk_stream_close(str, 0); return FileIO_Error(extf, "tried to open a file owned by another project"); } } return struc-->AUXF_STREAM; .BadFile; struc-->AUXF_STATUS = AUXF_STATUS_IS_CLOSED; glk_stream_close(str, 0); return FileIO_Error(extf, "tried to open a file which seems to be malformed"); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Close File ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_Close extf struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to open a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_OPEN_FOR_READ or AUXF_STATUS_IS_OPEN_FOR_WRITE or AUXF_STATUS_IS_OPEN_FOR_APPEND) return FileIO_Error(extf, "tried to close a file which is not open"); if (struc-->AUXF_STATUS == AUXF_STATUS_IS_OPEN_FOR_WRITE or AUXF_STATUS_IS_OPEN_FOR_APPEND) { glk_stream_set_position(struc-->AUXF_STREAM, 0, 0); ! seek start glk_put_char_stream(struc-->AUXF_STREAM, '*'); ! mark as complete } glk_stream_close(struc-->AUXF_STREAM, 0); struc-->AUXF_STATUS = AUXF_STATUS_IS_CLOSED; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Get Character ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_GetC extf struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return -1; struc = TableOfExternalFiles-->extf; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_OPEN_FOR_READ) return -1; return glk_get_char_stream(struc-->AUXF_STREAM); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Put Character ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_PutC extf char struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return -1; return FileIO_Error(extf, "tried to write to a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_STATUS ~= AUXF_STATUS_IS_OPEN_FOR_WRITE or AUXF_STATUS_IS_OPEN_FOR_APPEND) return FileIO_Error(extf, "tried to write to a file which is not open for writing"); return glk_put_char_stream(struc-->AUXF_STREAM, char); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Print Line ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_PrintLine extf ch struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to write to a non-file"); struc = TableOfExternalFiles-->extf; for (::) { ch = FileIO_GetC(extf); if (ch == -1) rfalse; if (ch == 10 or 13) { print "^"; rtrue; } print (char) ch; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Print Contents ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_PrintContents extf tab struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to access a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "printing text will not work with binary files"); if (FileIO_Open(extf, false) == 0) rfalse; while (FileIO_PrintLine(extf)) ; FileIO_Close(extf); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Print Text ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_PutContents extf text append_flag struc str ch oldstream; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to access a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "writing text will not work with binary files"); oldstream = glk_stream_get_current(); str = FileIO_Open(extf, true, append_flag); if (str == 0) rfalse; @push say__p; @push say__pc; ClearParagraphing(19); TEXT_TY_Say(text); FileIO_Close(extf); if (oldstream) glk_stream_set_current(oldstream); @pull say__pc; @pull say__p; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Serialising Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FileIO_PutTable extf tab rv struc oldstream; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to write table to a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "writing a table will not work with binary files"); oldstream = glk_stream_get_current(); if (FileIO_Open(extf, true) == 0) rfalse; rv = TablePrint(tab); FileIO_Close(extf); if (oldstream) glk_stream_set_current(oldstream); if (rv) return RunTimeProblem(RTP_TABLE_CANTSAVE, tab); rtrue; ]; [ FileIO_GetTable extf tab struc; if ((extf < 1) || (extf > NO_EXTERNAL_FILES)) return FileIO_Error(extf, "tried to read table from a non-file"); struc = TableOfExternalFiles-->extf; if (struc-->AUXF_BINARY) return FileIO_Error(extf, "reading a table will not work with binary files"); if (FileIO_Open(extf, false) == 0) rfalse; TableRead(tab, extf); FileIO_Close(extf); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Z-Machine Stubs ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFNOT; ! TARGET_GLULX [ FileIO_Exists extf; rfalse; ]; [ FileIO_Ready extf; rfalse; ]; [ FileIO_GetC extf; return -1; ]; [ FileIO_PutTable extf tab; return FileIO_Error(extf, "external files can only be used under Glulx"); ]; [ FileIO_MarkReady extf status; FileIO_PutTable(extf); ]; [ FileIO_GetTable extf tab; FileIO_PutTable(extf); ]; [ FileIO_PrintContents extf; FileIO_PutTable(extf); ]; [ FileIO_PutContents extf; FileIO_PutTable(extf); ]; #ENDIF; ! TARGET_GLULX ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! FileIO.i6t: Back To Core ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFNOT; ! PLUGIN_FILES [ FileIO_GetC extf; return -1; ]; #ENDIF; ! PLUGIN_FILES ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: The Memory Stack ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant MAX_MSTACK_FRAME = 2 + 6; Constant MSTACK_CAPACITY = 20; Constant MSTACK_SIZE = MSTACK_CAPACITY*MAX_MSTACK_FRAME; Array MStack --> MSTACK_SIZE; Global MStack_Top = 0; ! Topmost word currently used ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Create Frame ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Mstack_Create_Frame creator id extent; if (creator == 0) rfalse; extent = creator.call(MStack_Top+2, 1); if (extent == 0) rfalse; if (MStack_Top + MAX_MSTACK_FRAME >= MSTACK_SIZE + 2) { RunTimeProblem(RTP_MSTACKMEMORY, MSTACK_SIZE); Mstack_Backtrace(); rfalse; } MStack_Top++; MStack-->MStack_Top = id; MStack_Top++; MStack_Top = MStack_Top + extent; MStack-->MStack_Top = -(extent+2); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Destroy Frame ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Mstack_Destroy_Frame creator id pos; pos = Mstack_Seek_Frame(id); if (pos == 0) rfalse; ! Not found: do nothing MStack_Top = pos - 2; ! Clear mstack down to just below this frame if (creator) creator.call(pos, -1); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Seek Frame ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global MStack_Frame_Extent = 0; [ Mstack_Seek_Frame id pos; pos = MStack_Top; while ((pos > 0) && (MStack-->pos ~= 0)) { MStack_Frame_Extent = MStack-->pos; pos = pos + MStack_Frame_Extent; MStack_Frame_Extent = (-2) - MStack_Frame_Extent; if (MStack-->(pos+1) == id) return pos+2; } MStack_Frame_Extent = 0; return 0; ! Not found ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Backtrace ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Mstack_Backtrace pos k; print "Mstack backtrace: size ", MStack_Top+1, " words^"; pos = MStack_Top; while (MStack-->pos ~= 0) { MStack_Frame_Extent = MStack-->pos; pos = pos + MStack_Frame_Extent; MStack_Frame_Extent = (-2) - MStack_Frame_Extent; print "Block at ", pos+2, " owner ID ", MStack-->(pos+1), " size ", MStack_Frame_Extent, "^"; for (k=0: k(pos+2+k), " "; print "^"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Access to Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MstVO id off pos; pos = Mstack_Seek_Frame(id); if (pos == 0) { print "Variable unavailable for this action, activity or rulebook: ", "internal ID number ", id, "/", off, "^"; rfalse; } if ((off<0) || (off >= MStack_Frame_Extent)) { print "Variable stack offset wrong: ", id, "/", off, " at ", pos, "^"; rfalse; } return pos+off; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Access to Nonexistent Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MstVON id off pos; pos = Mstack_Seek_Frame(id); if (pos == 0) { return 0; ! word position 0 on the M-stack } if ((off<0) || (off >= MStack_Frame_Extent)) { print "Variable stack offset wrong: ", id, "/", off, " at ", pos, "^"; rfalse; } return pos+off; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Rulebook Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFNDEF MEMORY_ECONOMY; Array rulebook_var_creators --> 0 0 0 0 0 0 0 0 0 RBSTVC_9 0 RBSTVC_11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; #endif; [ RBSTVC_9 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = selfobj; pos++; } else { pos++; } return 1; ]; [ RBSTVC_11 pos ! Implied call parameter state ! Implied call parameter ; if (state == 1) { MStack-->pos = false; pos++; MStack-->pos = false; pos++; MStack-->pos = 0; pos++; MStack-->pos = 0; pos++; MStack-->pos = 0; pos++; MStack-->pos = false; pos++; } else { pos++; pos++; pos++; pos++; pos++; pos++; } return 6; ]; [ MStack_CreateRBVars rb cr; #ifdef MEMORY_ECONOMY; switch (rb) { 9: cr = RBSTVC_9; 11: cr = RBSTVC_11; } #IFNOT; cr = rulebook_var_creators-->rb; #endif; if (cr == 0) return; Mstack_Create_Frame(cr, rb); ]; [ MStack_DestroyRBVars rb cr; #ifdef MEMORY_ECONOMY; switch (rb) { 9: cr = RBSTVC_9; 11: cr = RBSTVC_11; } #IFNOT; cr = rulebook_var_creators-->rb; #endif; if (cr == 0) return; Mstack_Destroy_Frame(cr, rb); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! MStack.i6t: Activity Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array activity_var_creators --> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; [ MStack_CreateAVVars av cr; cr = activity_var_creators-->av; if (cr == 0) return; Mstack_Create_Frame(cr, av + 10000); ]; [ MStack_DestroyAVVars av cr; cr = activity_var_creators-->av; if (cr == 0) return; Mstack_Destroy_Frame(cr, av + 10000); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Perform Undo ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Perform_Undo; #ifdef PREVENT_UNDO; IMMEDIATELY_UNDO_RM('A'); new_line; return; #endif; if (IterationsOfTurnSequence == 0) { IMMEDIATELY_UNDO_RM('B'); new_line; return; } if (undo_flag == 0) { IMMEDIATELY_UNDO_RM('C'); new_line; return; } if (undo_flag == 1) { IMMEDIATELY_UNDO_RM('D'); new_line; return; } if (VM_Undo() == 0) { IMMEDIATELY_UNDO_RM('F'); new_line; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Announce Score Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ANNOUNCE_SCORE_R; if (actor ~= player) rfalse; #Iftrue USE_SCORING == 0; ANNOUNCE_SCORE_RM('C'); new_line; #ifnot; ANNOUNCE_SCORE_RM('A'); PrintRank(); #endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Switch Score Notification On Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SWITCH_SCORE_NOTIFY_ON_R; if (actor ~= player) rfalse; #Iftrue USE_SCORING == 0; ANNOUNCE_SCORE_R(); #ifnot; notify_mode=1; #endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Standard Report Switching Score Notification On Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ REP_SWITCH_NOTIFY_ON_R; if (actor ~= player) rfalse; #Iftrue USE_SCORING ~= 0; REP_SWITCH_NOTIFY_ON_RM('A'); new_line; #endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Switch Score Notification Off Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SWITCH_SCORE_NOTIFY_OFF_R; if (actor ~= player) rfalse; #Iftrue USE_SCORING == 0; ANNOUNCE_SCORE_R(); #ifnot; notify_mode=0; #endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Standard Report Switching Score Notification Off Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ REP_SWITCH_NOTIFY_OFF_R; if (actor ~= player) rfalse; #Iftrue USE_SCORING ~= 0; REP_SWITCH_NOTIFY_OFF_RM('A'); new_line; #endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Prefer Sometimes Abbreviated Room Descriptions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PREFER_SOMETIMES_ABBREVIATED_R; if (actor ~= player) rfalse; lookmode=1; ]; ! Brief ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Standard Report Prefer Sometimes Abbreviated Room Descriptions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ REP_PREFER_SOMETIMES_ABBR_R; if (actor ~= player) rfalse; print (TEXT_TY_Say) Story; REP_PREFER_SOMETIMES_ABBR_RM('A'); new_line; ]; ! Brief ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Prefer Unabbreviated Room Descriptions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PREFER_UNABBREVIATED_R; if (actor ~= player) rfalse; lookmode=2; ]; ! Verbose ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Standard Report Prefer Unabbreviated Room Descriptions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ REP_PREFER_UNABBREVIATED_R; if (actor ~= player) rfalse; print (TEXT_TY_Say) Story; REP_PREFER_UNABBREVIATED_RM('A'); new_line; ]; ! Verbose ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Prefer Abbreviated Room Descriptions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PREFER_ABBREVIATED_R; if (actor ~= player) rfalse; lookmode=3; ]; ! Superbrief ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Standard Report Prefer Abbreviated Room Descriptions Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ REP_PREFER_ABBREVIATED_R; if (actor ~= player) rfalse; print (TEXT_TY_Say) Story; REP_PREFER_ABBREVIATED_RM('A'); new_line; ]; ! Superbrief ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! OutOfWorld.i6t: Announce Pronoun Meanings Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ANNOUNCE_PRONOUN_MEANINGS_R x y c d; if (actor ~= player) rfalse; ANNOUNCE_PRONOUN_MEANINGS_RM('A'); c = (LanguagePronouns-->0)/3; if (player ~= selfobj) c++; if (c==0) { ANNOUNCE_PRONOUN_MEANINGS_RM('D'); rtrue; } for (x = 1, d = 0 : x <= LanguagePronouns-->0: x = x+3) { print "~", (address) LanguagePronouns-->x, "~ "; y = LanguagePronouns-->(x+2); if (y == NULL) ANNOUNCE_PRONOUN_MEANINGS_RM('C'); else { ANNOUNCE_PRONOUN_MEANINGS_RM('B'); print (the) y; } d++; if (d < c-1) print ", "; if (d == c-1) { #ifdef SERIAL_COMMA; print ","; #endif; LIST_WRITER_INTERNAL_RM('C'); } } if (player ~= selfobj) { print "~", (address) ME1__WD, "~ "; ANNOUNCE_PRONOUN_MEANINGS_RM('B'); c = player; player = selfobj; print (the) c; player = c; } "."; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Paragraph Control ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: State ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== !Constant TRACE_I7_SPACING; [ ClearParagraphing r; say__p = 0; say__pc = 0; ]; [ DivideParagraphPoint; #ifdef TRACE_I7_SPACING; print "[DPP", say__p, say__pc, "]"; #endif; if (say__p) { new_line; say__p = 0; say__pc = say__pc | PARA_COMPLETED; say__pc_save = true; if (say__pc & PARA_PROMPTSKIP) say__pc = say__pc - PARA_PROMPTSKIP; if (say__pc & PARA_SUPPRESSPROMPTSKIP) say__pc = say__pc - PARA_SUPPRESSPROMPTSKIP; } #ifdef TRACE_I7_SPACING; print "[-->", say__p, say__pc, "]"; #endif; say__pc = say__pc | PARA_CONTENTEXPECTED; say__pc_save = (say__pc & PARA_COMPLETED); ]; [ AdjustParagraphPoint; #ifdef TRACE_I7_SPACING; print "[APP ", say__p, " ", say__pc, " ", say__pc_save, "]^"; #endif; if (say__pc_save) say__pc = (say__pc | PARA_COMPLETED); ]; [ ParaContent; if (say__pc & PARA_CONTENTEXPECTED) { say__pc = say__pc - PARA_CONTENTEXPECTED; say__p = 1; } ]; [ GoingLookBreak; if (say__pc & PARA_COMPLETED == 0) new_line; ClearParagraphing(10); ]; [ CommandClarificationBreak; new_line; ClearParagraphing(11); ]; [ RunParagraphOn; #ifdef TRACE_I7_SPACING; print "[RPO", say__p, say__pc, "]"; #endif; say__p = 0; say__pc = say__pc | PARA_PROMPTSKIP; say__pc = say__pc | PARA_SUPPRESSPROMPTSKIP; ]; [ SpecialLookSpacingBreak; #ifdef TRACE_I7_SPACING; print "[SLS", say__p, say__pc, "]"; #endif; say__p = 0; say__pc = say__pc | PARA_PROMPTSKIP; ]; [ EnsureBreakBeforePrompt; if ((say__p) || ((say__pc & PARA_PROMPTSKIP) && ((say__pc & PARA_SUPPRESSPROMPTSKIP)==0))) new_line; ClearParagraphing(12); ]; [ PrintSingleParagraph matter; say__p = 1; say__pc = say__pc | PARA_NORULEBOOKBREAKS; TEXT_TY_Say(matter); DivideParagraphPoint(13); say__pc = 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Say Number ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STextSubstitution; if (say__n ~= 1) print "s"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Prompt ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintPrompt i; RunTimeProblemShow(); ClearRTP(); style roman; EnsureBreakBeforePrompt(); TEXT_TY_Say( (Global_Vars-->1) ); ClearBoxedText(); ClearParagraphing(14); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Boxed Quotations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global pending_boxed_quotation; ! a routine to overlay the quotation on screen [ DisplayBoxedQuotation Q; pending_boxed_quotation = Q; ]; [ ClearBoxedText i; if (pending_boxed_quotation) { for (i=0: Runtime_Quotations_Displayed-->i: i++) if (Runtime_Quotations_Displayed-->i == pending_boxed_quotation) { pending_boxed_quotation = 0; return; } Runtime_Quotations_Displayed-->i = pending_boxed_quotation; ClearParagraphing(15); pending_boxed_quotation(); ClearParagraphing(16); pending_boxed_quotation = 0; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Score Notification ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NotifyTheScore d; #Iftrue USE_SCORING ~= 0; if (notify_mode == 1) { DivideParagraphPoint(); VM_Style(NOTE_VMSTY); d = score-last_score; if (d > 0) { ANNOUNCE_SCORE_RM('D', d); } else if (d < 0) { ANNOUNCE_SCORE_RM('E', -d); } new_line; VM_Style(NORMAL_VMSTY); } #Endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Status Line ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef TARGET_ZCODE; #Iftrue (#version_number == 6); [ DrawStatusLine; Z6_DrawStatusLine(); ]; #Endif; #Endif; #Ifndef DrawStatusLine; [ DrawStatusLine width posb; @push say__p; @push say__pc; BeginActivity(CONSTRUCTING_STATUS_LINE_ACT); VM_StatusLineHeight(1); VM_MoveCursorInStatusLine(1, 1); if (statuswin_current) { width = VM_ScreenWidth(); posb = width-15; spaces width; ClearParagraphing(17); if (ForActivity(CONSTRUCTING_STATUS_LINE_ACT) == false) { VM_MoveCursorInStatusLine(1, 2); TEXT_TY_Say(left_hand_status_line); VM_MoveCursorInStatusLine(1, posb); TEXT_TY_Say(right_hand_status_line); } VM_MoveCursorInStatusLine(1, 1); VM_MainWindow(); } ClearParagraphing(18); EndActivity(CONSTRUCTING_STATUS_LINE_ACT); @pull say__pc; @pull say__p; ]; #Endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Status Line Utilities ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array T_SL_Score_Moves --> CONSTANT_PACKED_TEXT_STORAGE SL_Score_Moves; [ SL_Score_Moves; if (not_yet_in_play) return; #Iftrue USE_SCORING > 0; print sline1, "/", sline2; #endif; ]; Array T_SL_Location --> CONSTANT_PACKED_TEXT_STORAGE SL_Location; [ SL_Location even_before; if ((not_yet_in_play) && (even_before == false)) return; if (location == thedark) { BeginActivity(PRINTING_NAME_OF_DARK_ROOM_ACT); if (ForActivity(PRINTING_NAME_OF_DARK_ROOM_ACT) == false) DARKNESS_NAME_INTERNAL_RM('A'); EndActivity(PRINTING_NAME_OF_DARK_ROOM_ACT); } else { FindVisibilityLevels(); if (visibility_ceiling == location) print (name) location; else print (The) visibility_ceiling; } ]; [ DARKNESS_NAME_INTERNAL_R; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Banner ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Banner; BeginActivity(PRINTING_BANNER_TEXT_ACT); if (ForActivity(PRINTING_BANNER_TEXT_ACT) == false) { VM_Style(HEADER_VMSTY); TEXT_TY_Say(Story); VM_Style(NORMAL_VMSTY); new_line; TEXT_TY_Say(Headline); #ifdef Story_Author; print " by "; TEXT_TY_Say(Story_Author); #endif; ! Story_Author new_line; VM_Describe_Release(); print " / Inform 7 build ", (PrintI6Text) NI_BUILD_COUNT, " "; print "(I6/v"; inversion; print " lib ", (PrintI6Text) LibRelease, ") "; #Ifdef STRICT_MODE; print "S"; #Endif; ! STRICT_MODE #Ifdef DEBUG; print "D"; #Endif; ! DEBUG new_line; } EndActivity(PRINTING_BANNER_TEXT_ACT); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Print Decimal Number ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DecimalNumber num; print num; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Print English Number ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ EnglishNumber n; LanguageNumber(n); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Print Text ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintI6Text x; if (x ofclass String) print (string) x; if (x ofclass Routine) return (x)(); if (x == EMPTY_TEXT_PACKED) rfalse; rtrue; ]; [ I7_String x; TEXT_TY_Say(x); ]; ! An alternative name now used only by extensions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Print Or Run ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintOrRun obj prop no_break pv st routine_return_value; @push self; self = obj; if (prop == 0) { print (name) prop; routine_return_value = true; } else { routine_return_value = TEXT_TY_Say(obj.prop); } @pull self; if (routine_return_value) { say__p = 1; if (no_break == false) { new_line; DivideParagraphPoint(); } } return routine_return_value; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Short Name Storage ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array StorageForShortName buffer 250; [ CPrintOrRun obj prop v length i; if ((obj ofclass String or Routine) || (prop == 0)) VM_PrintToBuffer (StorageForShortName, 160, obj); else { if (obj.prop == NULL) rfalse; if (metaclass(obj.prop) == Routine or String) VM_PrintToBuffer(StorageForShortName, 160, obj, prop); else return RunTimeError(2, obj, prop); } length = StorageForShortName-->0; StorageForShortName->WORDSIZE = VM_LowerToUpperCase(StorageForShortName->WORDSIZE); for (i=WORDSIZE: ii; if (i>WORDSIZE) say__p = 1; return; ]; [ Cap str nocaps; if (nocaps) print (string) str; else CPrintOrRun(str, 0); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Object Names I ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PSN__ o; if (o == 0) { LIST_WRITER_INTERNAL_RM('Y'); rtrue; } switch (metaclass(o)) { Routine: print ""; rtrue; String: print ""; rtrue; nothing: print ""; rtrue; } RegardingSingleObject(o); CarryOutActivity(PRINTING_THE_NAME_ACT, o); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Standard Name Printing Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global caps_mode = false; [ STANDARD_NAME_PRINTING_R obj; obj = parameter_value; if (obj == 0) { LIST_WRITER_INTERNAL_RM('Y'); return; } switch (metaclass(obj)) { Routine: print ""; return; String: print ""; return; nothing: print ""; return; } if (obj == player) { if (indef_mode == NULL && caps_mode) PRINT_PROTAGONIST_INTERNAL_RM('A'); else PRINT_PROTAGONIST_INTERNAL_RM('B'); return; } #Ifdef LanguagePrintShortName; if (LanguagePrintShortName(obj)) return; #Endif; ! LanguagePrintShortName if (indef_mode && obj.&short_name_indef ~= 0 && PrintOrRun(obj, short_name_indef, true) ~= 0) return; if (caps_mode && obj.&cap_short_name ~= 0 && PrintOrRun(obj, cap_short_name, true) ~= 0) { caps_mode = false; return; } if (obj.&short_name ~= 0 && PrintOrRun(obj, short_name, true) ~= 0) return; print (object) obj; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Internal Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PRINT_PROTAGONIST_INTERNAL_R; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Object Names II ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global short_name_case; [ PrefaceByArticle obj acode pluralise capitalise i artform findout artval; if (obj provides articles) { artval=(obj.&articles)-->(acode+short_name_case*LanguageCases); if (capitalise) print (Cap) artval, " "; else print (string) artval, " "; if (pluralise) return; print (PSN__) obj; return; } i = GetGNAOfObject(obj); if (pluralise) { if (i < 3 || (i >= 6 && i < 9)) i = i + 3; } i = LanguageGNAsToArticles-->i; artform = LanguageArticles + 3*WORDSIZE*LanguageContractionForms*(short_name_case + i*LanguageCases); #Iftrue (LanguageContractionForms == 2); if (artform-->acode ~= artform-->(acode+3)) findout = true; #Endif; ! LanguageContractionForms #Iftrue (LanguageContractionForms == 3); if (artform-->acode ~= artform-->(acode+3)) findout = true; if (artform-->(acode+3) ~= artform-->(acode+6)) findout = true; #Endif; ! LanguageContractionForms #Iftrue (LanguageContractionForms == 4); if (artform-->acode ~= artform-->(acode+3)) findout = true; if (artform-->(acode+3) ~= artform-->(acode+6)) findout = true; if (artform-->(acode+6) ~= artform-->(acode+9)) findout = true; #Endif; ! LanguageContractionForms #Iftrue (LanguageContractionForms > 4); findout = true; #Endif; ! LanguageContractionForms #Ifdef TARGET_ZCODE; if (standard_interpreter ~= 0 && findout) { StorageForShortName-->0 = 160; @output_stream 3 StorageForShortName; if (pluralise) print (number) pluralise; else print (PSN__) obj; @output_stream -3; acode = acode + 3*LanguageContraction(StorageForShortName + 2); } #Ifnot; ! TARGET_GLULX if (findout) { if (pluralise) Glulx_PrintAnyToArray(StorageForShortName, 160, EnglishNumber, pluralise); else Glulx_PrintAnyToArray(StorageForShortName, 160, PSN__, obj); acode = acode + 3*LanguageContraction(StorageForShortName); } #Endif; ! TARGET_ Cap (artform-->acode, ~~capitalise); ! print article if (pluralise) return; print (PSN__) obj; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Object Names III ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IndefArt obj i; if (obj == 0) { LIST_WRITER_INTERNAL_RM('Y'); rtrue; } i = indef_mode; indef_mode = true; if (obj has proper) { indef_mode = NULL; print (PSN__) obj; indef_mode = i; return; } if ((obj provides article) && (TEXT_TY_Compare(obj.article, EMPTY_TEXT_VALUE) ~= 0)) { PrintOrRun(obj, article, true); print " ", (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 2); indef_mode = i; ]; [ CIndefArt obj i; if (obj == 0) { LIST_WRITER_INTERNAL_RM('X'); rtrue; } i = indef_mode; indef_mode = true; if (obj has proper) { indef_mode = NULL; caps_mode = true; print (PSN__) obj; indef_mode = i; caps_mode = false; return; } if ((obj provides article) && (TEXT_TY_Compare(obj.article, EMPTY_TEXT_VALUE) ~= 0)) { TEXT_TY_Say_Capitalised(obj.article); print " ", (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 2, 0, 1); indef_mode = i; ]; [ DefArt obj i; i = indef_mode; indef_mode = false; if ((~~obj ofclass Object) || obj has proper) { indef_mode = NULL; print (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 1); indef_mode = i; ]; [ CDefArt obj i; i = indef_mode; indef_mode = false; if ((obj ofclass Object) && (obj has proper || obj == player)) { indef_mode = NULL; caps_mode = true; print (PSN__) obj; indef_mode = i; caps_mode = false; return; } if ((~~obj ofclass Object) || obj has proper) { indef_mode = NULL; print (PSN__) obj; indef_mode = i; return; } PrefaceByArticle(obj, 0); indef_mode = i; ]; [ PrintShortName obj i; i = indef_mode; indef_mode = NULL; PSN__(obj); indef_mode = i; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Printing.i6t: Say One Of ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ I7_SOO_PAR oldval count; if (count <= 1) return count; return random(count); ]; [ I7_SOO_RAN oldval count v; if (count <= 1) return count; v = oldval; while (v == oldval) v = random(count); return v; ]; [ I7_SOO_STI oldval count v; if (oldval) return oldval; return I7_SOO_PAR(oldval, count); ]; [ I7_SOO_CYC oldval count; oldval++; if (oldval > count) oldval = 1; return oldval; ]; [ I7_SOO_STOP oldval count; oldval++; if (oldval > count) oldval = count; return oldval; ]; [ I7_SOO_TAP oldval count tn rn c; if (count <= 1) return count; tn = count*(count+1)/2; rn = random(tn); for (c=1:c<=count:c++) { rn = rn - c; if (rn<=0) return (count-c+1); } ]; [ I7_SOO_TRAN oldval count; if (oldval32; [ I7_SOO_SHU oldval count sd ct v i j s ssd scope cc base; base = count+1; v = oldval%base; oldval = oldval/base; ct = oldval%base; sd = oldval/base; if (count > 32) return I7_SOO_PAR(oldval, count); if (count <= 1) v = count; else { !print "^In v=", v, " ct=", ct, " sd=", sd, "^"; cc = base*base; scope = (MAX_POSITIVE_NUMBER-1)/cc; !print "Scope = ", scope, "^"; if (sd == 0) { sd = random(scope); ct=0; } for (i=0:ii = i; ssd = sd; for (i=0:ij; I7_SOO_SHUF->j = I7_SOO_SHUF->i; I7_SOO_SHUF->i = s; } !for (i=0:ii, " "; print "^"; v = (I7_SOO_SHUF->ct)+1; ct++; if (ct >= count) { ct = 0; ssd = 0; } } !print "Out v=", v, " ct=", ct, " ssd=", sd, "^"; !print "Return ", v + ct*base + ssd*base*base, "^"; return v + ct*base + ssd*base*base; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Relation Records ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RR_NAME 5; Constant RR_PERMISSIONS 6; Constant RR_STORAGE 7; Constant RR_KIND 8; Constant RR_HANDLER 9; Constant RR_DESCRIPTION 10; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Valency Adjectives ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant VALENCY_MASK = RELS_EQUIVALENCE+RELS_SYMMETRIC+RELS_X_UNIQUE+RELS_Y_UNIQUE; [ RELATION_TY_EquivalenceAdjective rel set perms state handler; perms = RlnGetF(rel, RR_PERMISSIONS); if (perms & RELS_EQUIVALENCE) state = true; if (set < 0) return state; if ((set) && (state == false)) { perms = perms + RELS_EQUIVALENCE; if (perms & RELS_SYMMETRIC == 0) perms = perms + RELS_SYMMETRIC; } if ((set == false) && (state)) { perms = perms - RELS_EQUIVALENCE; if (perms & RELS_SYMMETRIC) perms = perms - RELS_SYMMETRIC; } RlnSetF(rel, RR_PERMISSIONS, perms); handler = RlnGetF(rel, RR_HANDLER); if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to an equivalence relation ***"; ]; [ RELATION_TY_SymmetricAdjective rel set perms state handler; perms = RlnGetF(rel, RR_PERMISSIONS); if (perms & RELS_SYMMETRIC) state = true; if (set < 0) return state; if ((set) && (state == false)) perms = perms + RELS_SYMMETRIC; if ((set == false) && (state)) perms = perms - RELS_SYMMETRIC; RlnSetF(rel, RR_PERMISSIONS, perms); handler = RlnGetF(rel, RR_HANDLER); if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a symmetric relation ***"; ]; [ RELATION_TY_OToOAdjective rel set perms state handler i; perms = RlnGetF(rel, RR_PERMISSIONS); if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == RELS_X_UNIQUE+RELS_Y_UNIQUE) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE == 0) perms = perms + RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE == 0) perms = perms + RELS_Y_UNIQUE; if (perms & RELS_EQUIVALENCE) perms = perms - RELS_EQUIVALENCE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } RlnSetF(rel, RR_PERMISSIONS, perms); handler = RlnGetF(rel, RR_HANDLER); if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a one-to-one relation ***"; ]; [ RELATION_TY_OToVAdjective rel set perms state handler; perms = RlnGetF(rel, RR_PERMISSIONS); if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == RELS_X_UNIQUE) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE == 0) perms = perms + RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; if (perms & RELS_SYMMETRIC) perms = perms - RELS_SYMMETRIC; if (perms & RELS_EQUIVALENCE) perms = perms - RELS_EQUIVALENCE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } RlnSetF(rel, RR_PERMISSIONS, perms); handler = RlnGetF(rel, RR_HANDLER); if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a one-to-various relation ***"; ]; [ RELATION_TY_VToOAdjective rel set perms state handler; perms = RlnGetF(rel, RR_PERMISSIONS); if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == RELS_Y_UNIQUE) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE == 0) perms = perms + RELS_Y_UNIQUE; if (perms & RELS_SYMMETRIC) perms = perms - RELS_SYMMETRIC; if (perms & RELS_EQUIVALENCE) perms = perms - RELS_EQUIVALENCE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } RlnSetF(rel, RR_PERMISSIONS, perms); handler = RlnGetF(rel, RR_HANDLER); if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a various-to-one relation ***"; ]; [ RELATION_TY_VToVAdjective rel set perms state handler; perms = RlnGetF(rel, RR_PERMISSIONS); if (perms & (RELS_X_UNIQUE+RELS_Y_UNIQUE) == 0) state = true; if (set < 0) return state; if ((set) && (state == false)) { if (perms & RELS_X_UNIQUE) perms = perms - RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE) perms = perms - RELS_Y_UNIQUE; } if ((set == false) && (state)) { if (perms & RELS_X_UNIQUE == 0) perms = perms + RELS_X_UNIQUE; if (perms & RELS_Y_UNIQUE == 0) perms = perms + RELS_Y_UNIQUE; } RlnSetF(rel, RR_PERMISSIONS, perms); handler = RlnGetF(rel, RR_HANDLER); if (handler(rel, RELS_SET_VALENCY, perms & VALENCY_MASK) == 0) "*** Can't change this to a various-to-various relation ***"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: One To One Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Relation_Now1to1 obj1 relation_property obj2 ol; ! Assert 1-1 true if (obj2) objectloop (ol provides relation_property) if (ol.relation_property == obj2) ol.relation_property = nothing; if (obj1) obj1.relation_property = obj2; ]; [ Relation_NowN1toV obj1 relation_property obj2; ! Assert 1-1 false if ((obj1) && (obj1.relation_property == obj2)) obj1.relation_property = nothing; ]; [ Relation_Now1to1V obj1 obj2 KOV relation_property ol N; ! Assert 1-1 true if (obj2) { N = KOVDomainSize(KOV); for (ol=1: ol<=N: ol++) if (GProperty(KOV, ol, relation_property) == obj2) WriteGProperty(KOV, ol, relation_property, 0); } if (obj1) WriteGProperty(KOV, obj1, relation_property, obj2); ]; [ Relation_NowN1toVV obj1 obj2 KOV relation_property; ! Assert 1-1 false if ((obj1) && (GProperty(KOV, obj1, relation_property) == obj2)) WriteGProperty(KOV, obj1, relation_property, 0); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Symmetric One To One Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Relation_NowS1to1 obj1 relation_property obj2; ! Assert symmetric 1-1 true if ((obj1 ofclass Object) && (obj1 provides relation_property) && (obj2 ofclass Object) && (obj2 provides relation_property)) { if (obj1.relation_property) { (obj1.relation_property).relation_property = 0; } if (obj2.relation_property) { (obj2.relation_property).relation_property = 0; } obj1.relation_property = obj2; obj2.relation_property = obj1; } ]; [ Relation_NowSN1to1 obj1 relation_property obj2; ! Assert symmetric 1-1 false if ((obj1 ofclass Object) && (obj1 provides relation_property) && (obj2 ofclass Object) && (obj2 provides relation_property) && (obj1.relation_property == obj2)) { obj1.relation_property = 0; obj2.relation_property = 0; } ]; [ Relation_NowS1to1V obj1 obj2 KOV relation_property; ! Assert symmetric 1-1 true if (GProperty(KOV, obj1, relation_property)) WriteGProperty(KOV, GProperty(KOV, obj1, relation_property), relation_property, 0); if (GProperty(KOV, obj2, relation_property)) WriteGProperty(KOV, GProperty(KOV, obj2, relation_property), relation_property, 0); WriteGProperty(KOV, obj1, relation_property, obj2); WriteGProperty(KOV, obj2, relation_property, obj1); ]; [ Relation_NowSN1to1V obj1 obj2 KOV relation_property; ! Assert symmetric 1-1 false if (GProperty(KOV, obj1, relation_property) == obj2) { WriteGProperty(KOV, obj1, relation_property, 0); WriteGProperty(KOV, obj2, relation_property, 0); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Various To Various Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant VTOVS_LEFT_INDEX_PROP = 0; Constant VTOVS_RIGHT_INDEX_PROP = 1; Constant VTOVS_LEFT_DOMAIN_SIZE = 2; Constant VTOVS_RIGHT_DOMAIN_SIZE = 3; Constant VTOVS_LEFT_PRINTING_ROUTINE = 4; Constant VTOVS_RIGHT_PRINTING_ROUTINE = 5; Constant VTOVS_CACHE_BROKEN = 6; Constant VTOVS_CACHE = 7; [ Relation_NowVtoV obj1 relation obj2 sym pr pr2 i1 i2 vtov_structure; if (sym && (obj2 ~= obj1)) { Relation_NowVtoV(obj2, relation, obj1, false); } vtov_structure = RlnGetF(relation, RR_STORAGE); pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; vtov_structure-->VTOVS_CACHE_BROKEN = true; ! Mark any cache as broken if (pr) { if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; else return RunTimeProblem(RTP_IMPREL, obj1, relation); } else i1 = obj1-1; if (pr2) { if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; else return RunTimeProblem(RTP_IMPREL, obj2, relation); } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; vtov_structure-->pr = (vtov_structure-->pr) | i1; ]; [ Relation_NowNVtoV obj1 relation obj2 sym pr pr2 i1 i2 vtov_structure; if (sym && (obj2 ~= obj1)) { Relation_NowNVtoV(obj2, relation, obj1, false); } vtov_structure = RlnGetF(relation, RR_STORAGE); pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; vtov_structure-->VTOVS_CACHE_BROKEN = true; ! Mark any cache as broken if (pr) { if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; else return RunTimeProblem(RTP_IMPREL, obj1, relation); } else i1 = obj1-1; if (pr2) { if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; else return RunTimeProblem(RTP_IMPREL, obj2, relation); } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; if ((vtov_structure-->pr) & i1) vtov_structure-->pr = vtov_structure-->pr - i1; ]; [ Relation_TestVtoV obj1 relation obj2 sym pr pr2 i1 i2 vtov_structure; vtov_structure = RlnGetF(relation, RR_STORAGE); pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; if (sym && (obj2 > obj1)) { sym = obj1; obj1 = obj2; obj2 = sym; } if (pr) { if ((obj1 ofclass Object) && (obj1 provides pr)) i1 = obj1.pr; else { RunTimeProblem(RTP_IMPREL, obj1, relation); rfalse; } } else i1 = obj1-1; if (pr2) { if ((obj2 ofclass Object) && (obj2 provides pr2)) i2 = obj2.pr2; else { RunTimeProblem(RTP_IMPREL, obj2, relation); rfalse; } } else i2 = obj2-1; pr = i1*(vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE) + i2; i1 = IncreasingPowersOfTwo_TB-->(pr%16); pr = pr/16 + 8; if ((vtov_structure-->pr) & i1) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Equivalence Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Relation_NowEquiv obj1 relation_property obj2 big little; big = obj1.relation_property; little = obj2.relation_property; if (big == little) return; if (big < little) { little = obj1.relation_property; big = obj2.relation_property; } objectloop (obj1 provides relation_property) if (obj1.relation_property == big) obj1.relation_property = little; ]; [ Relation_NowNEquiv obj1 relation_property obj2 old new; old = obj1.relation_property; new = obj2.relation_property; if (old ~= new) return; new = 0; objectloop (obj2 provides relation_property) if (obj2.relation_property > new) new = obj2.relation_property; new++; obj1.relation_property = new; ]; [ Relation_NowEquivV obj1 obj2 KOV relation_property n big little i; big = GProperty(KOV, obj1, relation_property); little = GProperty(KOV, obj2, relation_property); if (big == little) return; if (big < little) { little = GProperty(KOV, obj1, relation_property); big = GProperty(KOV, obj2, relation_property); } n = KOVDomainSize(KOV); for (i=1: i<=n: i++) if (GProperty(KOV, i, relation_property) == big) WriteGProperty(KOV, i, relation_property, little); ]; [ Relation_NowNEquivV obj1 obj2 KOV relation_property n old new i; old = GProperty(KOV, obj1, relation_property); new = GProperty(KOV, obj2, relation_property); if (old ~= new) return; new = 0; n = KOVDomainSize(KOV); for (i=1: i<=n: i++) if (GProperty(KOV, i, relation_property) > new) new = GProperty(KOV, i, relation_property); new++; WriteGProperty(KOV, obj1, relation_property, new); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Show Various to Various ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Relation_ShowVtoV relation sym x obj1 obj2 pr pr2 proutine1 proutine2 vtov_structure; vtov_structure = RlnGetF(relation, RR_STORAGE); pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; proutine1 = vtov_structure-->VTOVS_LEFT_PRINTING_ROUTINE; proutine2 = vtov_structure-->VTOVS_RIGHT_PRINTING_ROUTINE; if (pr && pr2) { objectloop (obj1 provides pr) objectloop (obj2 provides pr2) { if (sym && obj2 > obj1) continue; if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " ", (The) obj1; if (sym) print " <=> "; else print " >=> "; print (the) obj2, "^"; } } return; } if (pr && (pr2==0)) { objectloop (obj1 provides pr) for (obj2=1:obj2<=vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE:obj2++) { if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " ", (The) obj1, " >=> "; (proutine2).call(obj2); print "^"; } } return; } if ((pr==0) && (pr2)) { for (obj1=1:obj1<=vtov_structure-->2:obj1++) objectloop (obj2 provides pr2) { if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " "; (proutine1).call(obj1); print " >=> ", (the) obj2, "^"; } } return; } for (obj1=1:obj1<=vtov_structure-->2:obj1++) for (obj2=1:obj2<=vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE:obj2++) if (Relation_TestVtoV(obj1, relation, obj2)) { if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " "; (proutine1).call(obj1); print " >=> "; (proutine2).call(obj2); print "^"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Show One to One ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Relation_ShowOtoO relation sym x relation_property t N obj1 obj2; relation_property = RlnGetF(relation, RR_STORAGE); t = KindBaseTerm(RlnGetF(relation, RR_KIND), 0); ! Kind of left term N = KOVDomainSize(t); if (t == OBJECT_TY) { objectloop (obj1 provides relation_property) { obj2 = obj1.relation_property; if (sym && obj2 < obj1) continue; if (obj2 == 0) continue; if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " ", (The) obj1; if (sym) print " == "; else print " >=> "; print (the) obj2, "^"; } } else { for (obj1=1: obj1<=N: obj1++) { obj2 = GProperty(t, obj1, relation_property); if (sym && obj2 < obj1) continue; if (obj2 == 0) continue; if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " "; PrintKindValuePair(t, obj1); if (sym) print " == "; else print " >=> "; PrintKindValuePair(t, obj2); print "^"; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Show Reversed One to One ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Relation_RShowOtoO relation sym x relation_property obj1 obj2 t1 t2 N1 N2; relation_property = RlnGetF(relation, RR_STORAGE); t1 = KindBaseTerm(RlnGetF(relation, RR_KIND), 0); ! Kind of left term t2 = KindBaseTerm(RlnGetF(relation, RR_KIND), 1); ! Kind of right term if (t2 == OBJECT_TY) { if (t1 == OBJECT_TY) { objectloop (obj1) { objectloop (obj2 provides relation_property) { if (obj2.relation_property ~= obj1) continue; if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " ", (The) obj1; print " >=> "; print (the) obj2, "^"; } } } else { N1 = KOVDomainSize(t1); for (obj1=1: obj1<=N1: obj1++) { objectloop (obj2 provides relation_property) { if (obj2.relation_property ~= obj1) continue; if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " "; PrintKindValuePair(t1, obj1); print " >=> "; print (the) obj2, "^"; } } } } else { N2 = KOVDomainSize(t2); if (t1 == OBJECT_TY) { objectloop (obj1) { for (obj2=1: obj2<=N2: obj2++) { if (GProperty(t2, obj2, relation_property) ~= obj1) continue; if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " ", (The) obj1; print " >=> "; PrintKindValuePair(t2, obj2); print "^"; } } } else { N1 = KOVDomainSize(t1); for (obj1=1: obj1<=N1: obj1++) { for (obj2=1: obj2<=N2: obj2++) { if (GProperty(t2, obj2, relation_property) ~= obj1) continue; if (x == 0) { print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; x=1; } print " "; PrintKindValuePair(t1, obj1); print " >=> "; PrintKindValuePair(t2, obj2); print "^"; } } } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Show Equivalence ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RSE_Flip KOV v relation_property x; x = GProperty(KOV, v, relation_property); x = -x; WriteGProperty(KOV, v, relation_property, x); ]; [ RSE_Set KOV v relation_property; if (GProperty(KOV, v, relation_property) < 0) rtrue; rfalse; ]; [ Relation_ShowEquiv relation relation_property obj1 obj2 v c d somegroups t N x; print (string) RlnGetF(relation, RR_DESCRIPTION), ":^"; relation_property = RlnGetF(relation, RR_STORAGE); t = KindBaseTerm(RlnGetF(relation, RR_KIND), 0); ! Kind of left term N = KOVDomainSize(t); if (t == OBJECT_TY) { objectloop (obj1 provides relation_property) obj1.relation_property = -(obj1.relation_property); objectloop (obj1 provides relation_property) { if (obj1.relation_property < 0) { v = obj1.relation_property; c = 0; objectloop (obj2 has workflag2) give obj2 ~workflag2; objectloop (obj2 provides relation_property) { if (obj2.relation_property == v) { give obj2 workflag2; obj2.relation_property = -v; c++; } } if (c>1) { somegroups = true; print " { "; WriteListOfMarkedObjects(ENGLISH_BIT); print " }^"; } else obj1.relation_property = v; } } objectloop (obj2 has workflag2) give obj2 ~workflag2; c = 0; objectloop (obj1 provides relation_property) if (obj1.relation_property < 0) { c++; give obj1 workflag2; } if (c == 0) return; if (somegroups) print " and "; else print " "; if (c < 4) { WriteListOfMarkedObjects(ENGLISH_BIT); print " in"; } else print c; if (c == 1) print " a"; print " single-member group"; if (c > 1) print "s"; print "^"; objectloop (obj1 provides relation_property) if (obj1.relation_property < 0) obj1.relation_property = -(obj1.relation_property); } else { ! A slower method, since we have less efficient storage: for (obj1 = 1: obj1 <= N: obj1++) RSE_Flip(t, obj1, relation_property); for (obj1 = 1: obj1 <= N: obj1++) { if (RSE_Set(t, obj1, relation_property)) { v = GProperty(t, obj1, relation_property); c = 0; for (obj2 = 1: obj2 <= N: obj2++) if (GProperty(t, obj2, relation_property) == v) c++; if (c>1) { somegroups = true; print " {"; d = 0; for (obj2 = 1: obj2 <= N: obj2++) { if (GProperty(t, obj2, relation_property) == v) { print " "; PrintKindValuePair(t, obj2); if (d < c-1) print ","; print " "; RSE_Flip(t, obj2, relation_property); d++; } } print "}^"; } else WriteGProperty(t, obj1, relation_property, v); } } objectloop (obj2 has workflag2) give obj2 ~workflag2; c = 0; for (obj1 = 1: obj1 <= N: obj1++) if (RSE_Set(t, obj1, relation_property)) c++; if (c == 0) return; if (somegroups) print " and "; else print " "; if (c == 1) print "a"; else print c; print " single-member group"; if (c > 1) print "s"; print "^"; for (obj1 = 1: obj1 <= N: obj1++) if (RSE_Set(t, obj1, relation_property)) RSE_Flip(t, obj1, relation_property); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Relation Emptying ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Relation_EmptyOtoO relation sym clear relation_property obj1 obj2 t1 t2 N1 N2; relation_property = RlnGetF(relation, RR_STORAGE); t1 = KindBaseTerm(RlnGetF(relation, RR_KIND), 0); ! Kind of left term t2 = KindBaseTerm(RlnGetF(relation, RR_KIND), 1); ! Kind of right term if (t2 == OBJECT_TY) { objectloop (obj2 provides relation_property) { obj1 = obj2.relation_property; if (obj1) { if (clear) obj2.relation_property = nothing; else rfalse; } } } else { for (obj2=1: obj2<=N2: obj2++) { obj1 = GProperty(t2, obj2, relation_property); if (obj1) { if (clear) WriteGProperty(t2, obj2, relation_property, 0); else rfalse; } } } if (t1 ~= t2) { if (t1 == OBJECT_TY) { objectloop (obj1 provides relation_property) { obj2 = obj1.relation_property; if (obj2) { if (clear) obj1.relation_property = nothing; else rfalse; } } } else { for (obj1=1: obj1<=N2: obj1++) { obj2 = GProperty(t1, obj1, relation_property); if (obj2) { if (clear) WriteGProperty(t1, obj1, relation_property, 0); else rfalse; } } } } rtrue; ]; [ Relation_EmptyEquiv relation sym clear relation_property obj1 obj2 t N v; relation_property = RlnGetF(relation, RR_STORAGE); t = KindBaseTerm(RlnGetF(relation, RR_KIND), 0); ! Kind of left term N = KOVDomainSize(t); if (clear) { v = 1; if (t == OBJECT_TY) { objectloop (obj1 provides relation_property) obj1.relation_property = v++; } else { for (obj1=1: obj1<=N: obj1++) WriteGProperty(t, obj1, relation_property, v++); } rtrue; } if (t == OBJECT_TY) { objectloop (obj1 provides relation_property) objectloop (obj2 provides relation_property) if ((obj1 < obj2) && (obj1.relation_property == obj2.relation_property)) rfalse; } else { for (obj1=1: obj1<=N: obj1++) for (obj2=obj1+1: obj1<=N: obj1++) if (GProperty(t, obj1, relation_property) == GProperty(t, obj2, relation_property)) rfalse; } rtrue; ]; [ Relation_EmptyVtoV relation sym clear vtov_structure obj1 obj2 pr pr2 proutine1 proutine2; vtov_structure = RlnGetF(relation, RR_STORAGE); pr = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; proutine1 = vtov_structure-->VTOVS_LEFT_PRINTING_ROUTINE; proutine2 = vtov_structure-->VTOVS_RIGHT_PRINTING_ROUTINE; if (pr && pr2) { objectloop (obj1 provides pr) objectloop (obj2 provides pr2) { if (sym && obj2 > obj1) continue; if (Relation_TestVtoV(obj1, relation, obj2)) { if (clear) Relation_NowNVtoV(obj1, relation, obj2, sym); else rfalse; } } return; } if (pr && (pr2==0)) { objectloop (obj1 provides pr) for (obj2=1:obj2<=vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE:obj2++) { if (Relation_TestVtoV(obj1, relation, obj2)) { if (clear) Relation_NowNVtoV(obj1, relation, obj2, sym); else rfalse; } } return; } if ((pr==0) && (pr2)) { for (obj1=1:obj1<=vtov_structure-->2:obj1++) objectloop (obj2 provides pr2) { if (Relation_TestVtoV(obj1, relation, obj2)) { if (clear) Relation_NowNVtoV(obj1, relation, obj2, sym); else rfalse; } } return; } for (obj1=1:obj1<=vtov_structure-->2:obj1++) for (obj2=1:obj2<=vtov_structure-->VTOVS_RIGHT_DOMAIN_SIZE:obj2++) if (Relation_TestVtoV(obj1, relation, obj2)) { if (Relation_TestVtoV(obj1, relation, obj2)) { if (clear) Relation_NowNVtoV(obj1, relation, obj2, sym); else rfalse; } } rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Map Route-Finding ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifndef FAST_ROUTE_FINDING; #ifndef SLOW_ROUTE_FINDING; #ifdef TARGET_GLULX; Constant FAST_ROUTE_FINDING; #ifnot; Constant SLOW_ROUTE_FINDING; #endif; #endif; #endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Cache Control ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant NUM_DOORS = 5; Constant NUM_ROOMS = 5; Array DoorRoutingViable -> NUM_DOORS+1; Global map_has_changed = true; Global last_filter; Global last_use_doors; [ SignalMapChange; map_has_changed = true; ]; [ MapRouteTo from to filter use_doors count oy oyi ds; if (from == nothing) return nothing; if (to == nothing) return nothing; if (from == to) return nothing; if ((filter) && (filter(from) == 0)) return nothing; if ((filter) && (filter(to) == 0)) return nothing; if ((last_filter ~= filter) || (last_use_doors ~= use_doors)) map_has_changed = true; oyi = 0; objectloop (oy has mark_as_room) { if ((filter == 0) || (filter(oy))) { if (oy.room_index == -1) map_has_changed = true; oy.room_index = oyi++; } else { if (oy.room_index >= 0) map_has_changed = true; oy.room_index = -1; } } oyi = 0; objectloop (oy ofclass K4_door) { ds = false; if ((use_doors & 2) || (oy has open) || ((oy has openable) && (oy hasnt locked))) ds = true; if (DoorRoutingViable->oyi ~= ds) map_has_changed = true; DoorRoutingViable->oyi = ds; oyi++; } if (map_has_changed) { #ifdef FAST_ROUTE_FINDING; ComputeFWMatrix(filter, use_doors); #endif; map_has_changed = false; last_filter = filter; last_use_doors = use_doors; } #ifdef FAST_ROUTE_FINDING; if (count) return FastCountRouteTo(from, to, filter, use_doors); return FastRouteTo(from, to, filter, use_doors); #ifnot; if (count) return SlowCountRouteTo(from, to, filter, use_doors); return SlowRouteTo(from, to, filter, use_doors); #endif; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Fast Route-Finding ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifdef FAST_ROUTE_FINDING; Array FWMatrix --> NUM_ROOMS*NUM_ROOMS; [ FastRouteTo from to filter use_doors diri i dir oy; if (from == to) return nothing; i = (FWMatrix-->(from.room_index*NUM_ROOMS + to.room_index))/No_Directions; if (i == 0) return nothing; diri = (FWMatrix-->(from.room_index*NUM_ROOMS + to.room_index))%No_Directions; i=0; objectloop (dir ofclass K3_direction) { if (i == diri) return dir; i++; } return nothing; ]; [ FastCountRouteTo from to filter use_doors k; if (from == to) return 0; k = (FWMatrix-->(from.room_index*NUM_ROOMS + to.room_index))/No_Directions; if (k == 0) return -1; return k; ]; [ ComputeFWMatrix filter use_doors oy ox oj axy ayj axj dir diri nd row; objectloop (oy has mark_as_room) if (oy.room_index >= 0) objectloop (ox has mark_as_room) if (ox.room_index >= 0) FWMatrix-->(oy.room_index*NUM_ROOMS + ox.room_index) = 0; objectloop (oy has mark_as_room) if (oy.room_index >= 0) { row = (oy.IK1_Count)*No_Directions; for (diri=0: diri(row+diri); if ((ox) && (ox has mark_as_room) && (ox.room_index >= 0)) { FWMatrix-->(oy.room_index*NUM_ROOMS + ox.room_index) = No_Directions + diri; continue; } if (use_doors && (ox ofclass K4_door) && ((use_doors & 2) || (DoorRoutingViable->(ox.IK4_Count)))) { @push location; location = oy; ox = ox.door_to(); @pull location; if ((ox) && (ox has mark_as_room) && (ox.room_index >= 0)) { FWMatrix-->(oy.room_index*NUM_ROOMS + ox.room_index) = No_Directions + diri; continue; } } } } objectloop (oy has mark_as_room) if (oy.room_index >= 0) objectloop (ox has mark_as_room) if (ox.room_index >= 0) { axy = (FWMatrix-->(ox.room_index*NUM_ROOMS + oy.room_index))/No_Directions; if (axy > 0) objectloop (oj has mark_as_room) if (oj.room_index >= 0) { ayj = (FWMatrix-->(oy.room_index*NUM_ROOMS + oj.room_index))/No_Directions; if (ayj > 0) { !print "Is it faster to go from ", (name) ox, " to ", ! (name) oj, " via ", (name) oy, "?^"; axj = (FWMatrix-->(ox.room_index*NUM_ROOMS + oj.room_index))/ No_Directions; if ((axj == 0) || (axy + ayj < axj)) { !print "Yes^"; FWMatrix-->(ox.room_index*NUM_ROOMS + oj.room_index) = (axy + ayj)*No_Directions + (FWMatrix-->(ox.room_index*NUM_ROOMS + oy.room_index))% No_Directions; } } } } ]; #ENDIF; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Slow Route-Finding ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifndef FAST_ROUTE_FINDING; [ SlowRouteTo from to filter use_doors obj dir in_direction progressed sl through_door; if (from == nothing) return nothing; if (to == nothing) return nothing; if (from == to) return nothing; objectloop (obj has mark_as_room) obj.vector = 0; to.vector = 1; !print "Routing from ", (the) from, " to ", (the) to, "^"; while (true) { progressed = false; !print "Pass begins^"; objectloop (obj has mark_as_room) if ((filter == 0) || (filter(obj))) if (obj.vector == 0) objectloop (dir ofclass K3_direction) { in_direction = Map_Storage-->((obj.IK1_Count)*No_Directions + dir.IK3_Count); if (in_direction == nothing) continue; !print (the) obj, " > ", (the) dir, " > ", (the) in_direction, "^"; if ((in_direction) && (in_direction has mark_as_room) && (in_direction.vector > 0) && ((filter == 0) || (filter(in_direction)))) { obj.vector = dir | WORD_HIGHBIT; !print "* ", (the) obj, " vector is ", (the) dir, "^"; progressed = true; continue; } if (use_doors && (in_direction ofclass K4_door) && ((use_doors & 2) || (in_direction has open) || ((in_direction has openable) && (in_direction hasnt locked)))) { sl = location; location = obj; through_door = in_direction.door_to(); location = sl; !print "Through door is ", (the) through_door, "^"; if ((through_door) && (through_door has mark_as_room) && (through_door.vector > 0) && ((filter == 0) || (filter(through_door)))) { obj.vector = dir | WORD_HIGHBIT; !print "* ", (the) obj, " vector is ", (the) dir, "^"; progressed = true; continue; } } } objectloop (obj has mark_as_room) obj.vector = obj.vector &~ WORD_HIGHBIT; if (from.vector) return from.vector; if (progressed == false) return from.vector; } ]; [ SlowCountRouteTo from to filter use_doors obj i; if (from == nothing) return -1; if (to == nothing) return -1; if (from == to) return 0; if (from has mark_as_room && to has mark_as_room) { obj = MapRouteTo(from,to,filter,use_doors); if (obj == nothing) return -1; i = 0; obj = from; while ((obj ~= to) && (iVTOVS_CACHE) return FastVtoVRelRouteTo(relation, from, to, count); left_ix = vtov_structure-->VTOVS_LEFT_INDEX_PROP; pr2 = vtov_structure-->VTOVS_RIGHT_INDEX_PROP; objectloop (obj ofclass Object && obj provides vector) obj.vector = 0; to.vector = 1; while (true) { progressed = false; objectloop (obj ofclass Object && obj provides left_ix) if (obj.vector == 0) { objectloop (obj2 ofclass Object && obj2 provides pr2 && obj2.vector > 0) { if (Relation_TestVtoV(obj, relation, obj2)) { obj.vector = obj2 | WORD_HIGHBIT; progressed = true; continue; } } } objectloop (obj ofclass Object && obj provides left_ix) obj.vector = obj.vector &~ WORD_HIGHBIT; if (from.vector) break; if (progressed == false) break; } if (count) { if (from.vector == nothing) return -1; i = 0; obj = from; while ((obj ~= to) && (i<=MAX_ROUTE_LENGTH)) { i++; obj = obj.vector; } return i; } return from.vector; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Fast Various To Various Route-Finding ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FastVtoVRelRouteTo relation from to count domainsize cache cache2 left_ix ox oy oj offset axy axj ayj; domainsize = RlnGetF(relation, RR_STORAGE)-->2; ! Number of left instances left_ix = RlnGetF(relation, RR_STORAGE)-->VTOVS_LEFT_INDEX_PROP; if ((from provides left_ix) && (to provides left_ix)) { if (domainsize < 256) { cache = RlnGetF(relation, RR_STORAGE)-->VTOVS_CACHE; cache2 = cache + domainsize*domainsize; if (RlnGetF(relation, RR_STORAGE)-->VTOVS_CACHE_BROKEN == true) { RlnGetF(relation, RR_STORAGE)-->VTOVS_CACHE_BROKEN = false; objectloop (oy provides left_ix) objectloop (ox provides left_ix) if (Relation_TestVtoV(oy, relation, ox)) { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache->offset = 1; cache2->offset = ox.left_ix; } else { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache->offset = 0; cache2->offset = 255; } for (oy=0: oy(ox*domainsize + oy); if (axy > 0) for (oj=0: oj(oy*domainsize + oj); if (ayj > 0) { offset = ox*domainsize + oj; axj = cache->offset; if ((axj == 0) || (axy + ayj < axj)) { cache->offset = (axy + ayj); cache2->offset = cache2->(ox*domainsize + oy); } } } } } if (count) { count = cache->((from.left_ix)*domainsize + (to.left_ix)); if (count == 0) return -1; return count; } oy = cache2->((from.left_ix)*domainsize + (to.left_ix)); if (oy < 255) objectloop (ox provides left_ix) if (ox.left_ix == oy) return ox; return nothing; } else { cache = RlnGetF(relation, RR_STORAGE)-->VTOVS_CACHE; cache2 = cache + WORDSIZE*domainsize*domainsize; if (RlnGetF(relation, RR_STORAGE)-->VTOVS_CACHE_BROKEN == true) { RlnGetF(relation, RR_STORAGE)-->VTOVS_CACHE_BROKEN = false; objectloop (oy provides left_ix) objectloop (ox provides left_ix) if (Relation_TestVtoV(oy, relation, ox)) { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache-->offset = 1; cache2-->offset = ox; } else { offset = ((oy.left_ix)*domainsize + (ox.left_ix)); cache-->offset = 0; cache2-->offset = nothing; } for (oy=0: oy(ox*domainsize + oy); if (axy > 0) for (oj=0: oj(oy*domainsize + oj); if (ayj > 0) { offset = ox*domainsize + oj; axj = cache-->offset; if ((axj == 0) || (axy + ayj < axj)) { cache-->offset = (axy + ayj); cache2-->offset = cache2-->(ox*domainsize + oy); } } } } } if (count) { count = cache-->((from.left_ix)*domainsize + (to.left_ix)); if (count == 0) return -1; return count; } return cache2-->((from.left_ix)*domainsize + (to.left_ix)); } } if (count) return -1; return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Relations.i6t: Iterating Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ IterateRelations callback; callback(Rel_Record_67); callback(Rel_Record_69); callback(Rel_Record_71); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Reporting ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array RTP_Buffer --> 7; [ RunTimeProblem n par1 par2 par3 ln file; if (RTP_Buffer-->0 == -1) { RTP_Buffer-->0 = n; RTP_Buffer-->1 = par1; RTP_Buffer-->2 = par2; RTP_Buffer-->3 = par3; RTP_Buffer-->4 = ln; RTP_Buffer-->5 = file; } RunTimeProblemShow(); ]; [ ClearRTP; RTP_Buffer-->0 = -1; RTP_Buffer-->6 = false; ]; [ SuspendRTP; RTP_Buffer-->6 = true; ]; [ ResumeRTP; RTP_Buffer-->6 = false; ]; [ RunTimeProblemShow n par1 par2 par3 ln file i c; if (RTP_Buffer-->0 == -1 or -2) return; if (RTP_Buffer-->6) return; n = RTP_Buffer-->0; par1 = RTP_Buffer-->1; par2 = RTP_Buffer-->2; par3 = RTP_Buffer-->3; ln = RTP_Buffer-->4; file = RTP_Buffer-->5; RTP_Buffer-->0 = -2; print "^*** Run-time problem P", n; if (ln) { print " (at paragraph ", ln, " in "; if (file == 0) print "the source text"; else ShowOneExtension(file); print ")"; } print ": "; switch(n) { RTP_BACKDROP: print "Tried to move ", (the) par1, " (a backdrop) to ", (the) par2, ", which is not a region.^"; RTP_CANTCHANGE: print "Tried to change player to ", (the) par1, ", which is not a person.^"; RTP_NOEXIT: print "Tried to change ", (the) par2, " exit of ", (the) par1, ", but it didn't seem to have such an exit to change.^"; RTP_EXITDOOR: print "Tried to change ", (the) par2, " exit of ", (the) par1, ", but it led to a door, not a room.^"; RTP_IMPREL: print "Tried to access an inappropriate relation for ", (the) par1, ", violating '", (string) RlnGetF(par2, RR_DESCRIPTION), "'.^"; RTP_TOOMANYRULEBOOKS: print "Too many rulebooks in simultaneous use.^"; RTP_TOOMANYEVENTS: print "Too many timed events are going on at once.^"; RTP_BADPROPERTY: print "Tried to access non-existent property for ", (the) par1, ".^"; RTP_UNPROVIDED: print "Since ", (the) par1, " is not allowed the property ~", (string) par2, "~, it is against the rules to try to use it.^"; RTP_UNSET: print "Although ", (the) par1, " is allowed to have the property ~", (string) par2, "~, no value was ever given, so it can't now be used.^"; RTP_TOOMANYACTS: print "Too many activities are going on at once.^"; RTP_CANTABANDON: print "Tried to abandon an activity which wasn't going on.^"; RTP_CANTEND: print "Tried to end an activity which wasn't going on.^"; RTP_CANTMOVENOTHING: print "You can't move nothing.^"; RTP_CANTREMOVENOTHING: print "You can't remove nothing from play.^"; RTP_DIVZERO: print "You can't divide by zero.^"; RTP_BADVALUEPROPERTY: print "Tried to access property for a value which didn't fit: ", "if this were a number it would be ", par1, ".^"; RTP_NOTBACKDROP: print "Tried to move ", (the) par1, " (not a backdrop) to ", (the) par2, ", which is a region.^"; RTP_TABLE_NOCOL: print "Attempt to look up a non-existent column in the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOCORR: print "Attempt to look up a non-existent correspondence in the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOROW: print "Attempt to look up a non-existent row in the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOENTRY: print "Attempt to look up a non-existent entry at column ", par2, ", row ", par3, " of the table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOTABLE: print "Attempt to blank out a row from a non-existent table (value ", par1, ").^"; RTP_TABLE_NOTABLE2: print "Attempt to access an entry from a non-existent table.^"; RTP_TABLE_NOMOREBLANKS: print "Attempt to choose a blank row in a table with none left: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_NOROWS: print "Attempt to choose a random row in an entirely blank table: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_CANTRUNTHROUGH: print "Attempt to repeat through a table in a tricky column order: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_CANTSORT: print "Attempt to sort a table whose ordering must remain fixed: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_CANTSAVE: print "Attempt to save a table to a file whose data is unstable: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_WONTFIT: print "File being read has too many rows or columns to fit into table: table '", (PrintTableName) par1, "'.^"; RTP_TABLE_BADFILE: print "File being read is not a previously saved table: table '", (PrintTableName) par1, "'.^"; RTP_NOTINAROOM: print "Attempt to test if the current location is '", (the) par1, "', which is not a room or region.^"; RTP_BADTOPIC: print "Attempt to see if a snippet of text matches something which is not a topic.^"; RTP_ROUTELESS: print "Attempt to find route or count steps through an implicit relation.^"; RTP_PROPOFNOTHING: print "Attempt to use a property of the 'nothing' non-object: property ", (PrintPropertyName) par2, "^"; RTP_DECIDEONWRONGKIND: print "Attempt to 'decide on V' where V is the wrong kind of object.^"; RTP_DECIDEONNOTHING: print "Attempt to 'decide on nothing'.^"; RTP_LOWLEVELERROR: print "Low level error.^"; RTP_DONTIGNORETURNSEQUENCE: print "Attempt to ignore the turn sequence rules.^"; RTP_SAYINVALIDSNIPPET: print "Attempt to say a snippet value which is currently invalid: words ", par1, " to ", par2, ".^"; RTP_SPLICEINVALIDSNIPPET: print "Attempt to splice a snippet value which is currently invalid: words ", par1, " to ", par2, ".^"; RTP_INCLUDEINVALIDSNIPPET: print "Attempt to match a snippet value which is currently invalid: words ", par1, " to ", par2, ".^"; RTP_LISTWRITERMEMORY: print "The list-writer has run out of memory.^"; RTP_CANTREMOVEPLAYER: print "Attempt to remove the player from play.^"; RTP_CANTBEOFFSTAGE: print "Attempt to move the player off-stage.^"; RTP_CANTREMOVEDOORS: print "Attempt to remove a door from play.^"; RTP_CANTCHANGEOFFSTAGE: print "Attempt to change the player to a person off-stage.^"; RTP_MSTACKMEMORY: print "The memory stack is exhausted.^"; RTP_TYPECHECK: print "Phrase applied to an incompatible kind of value.^"; RTP_FILEIOERROR: print "Error handling external file.^"; RTP_HEAPERROR: print "Memory allocation proved impossible.^"; RTP_LISTRANGEERROR: print "Attempt to use list item which does not exist.^"; RTP_LISTSIZENEGATIVE: print "Attempt to resize list to ", par1, " entries - there must ", "always be 0 or more.^"; RTP_REGEXPSYNTAXERROR: print "Syntax error in regular expression.^"; RTP_NOGLULXUNICODE: print "This interpreter does not support Unicode.^"; RTP_BACKDROPONLY: print "Only backdrops can be moved to multiple places.^"; RTP_NOTTHING: print "Tried to move ", (the) par1, " (not a thing) to ", (the) par2, ", but only things can move around.^"; RTP_SCENEHASNTSTARTED: print "The scene ", (PrintSceneName) par1, " hasn't started, so you can't ask when it did.^"; RTP_SCENEHASNTENDED: print "The scene ", (PrintSceneName) par1, " hasn't ended, so you can't ask when it did.^"; RTP_NEGATIVEROOT: print "You can't take the square root of a negative number.^"; RTP_CANTITERATE: print "You can't implicitly repeat through the values of this kind: ", "a problem arising from a description which started out here - ~", (string) par1, "~.^"; RTP_WRONGASSIGNEDKIND: print "Attempt to set a variable to the wrong kind of object: ", "you wrote '", (string) par2, "', which sets the value to ", (the) par1, " - but that doesn't have the kind '", (string) par3, "'.^"; RTP_RELKINDVIOLATION: print "Tried to change a relation for objects with the wrong kinds: ", (string) RlnGetF(par3, RR_DESCRIPTION), ", but you tried to ", "relate (or unrelate) ", (the) par1, " to ", (the) par2, ".^"; RTP_CANTMAKEPART: print "Tried to make the player part of something: ", (the) par1, ".^"; RTP_TEXTTOKENTOOHARD: print "This use of '[text]' is too complicated.^"; RTP_RELATIONCHANGEIMPOSSIBLE: print "This change of the relation's nature is impossible in play.^"; RTP_RELMINIMAL: print "This operation can't be done with the relation '", (string) RlnGetF(par3, RR_DESCRIPTION), "'.^"; RTP_REGIONSNOTADJACENT: print "You can't test whether something is adjacent to a region: ", "such as, in this case, ", (the) par1, ".^"; } print "^"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Low-Level Errors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant MAX_TIMERS = 0; [ RunTimeError n p1 p2; #Ifdef DEBUG; print "** Library error ", n, " (", p1, ",", p2, ") **^** "; switch (n) { 1: print "preposition not found (this should not occur)"; 2: print "Property value not routine or string: ~", (property) p2, "~ of ~", (name) p1, "~ (", p1, ")"; 3: print "Entry in property list not routine or string: ~", (property) p2, "~ list of ~", (name) p1, "~ (", p1, ")"; 4: print "Too many timers/daemons are active simultaneously. The limit is the library constant MAX_TIMERS (currently ", MAX_TIMERS, ") and should be increased"; 5: print "Object ~", (name) p1, "~ has no ~time_left~ property"; 7: print "The object ~", (name) p1, "~ can only be used as a player object if it has the ~number~ property"; 8: print "Attempt to take random entry from an empty table array"; 9: print p1, " is not a valid direction property number"; 10: print "The player-object is outside the object tree"; 11: print "The room ~", (name) p1, "~ has no ~description~ property"; 12: print "Tried to set a non-existent pronoun using SetPronoun"; 13: print "A 'topic' token can only be followed by a preposition"; default: print "(unexplained)"; } print " **^"; #Ifnot; print "** Library error ", n, " (", p1, ",", p2, ") **^"; #Endif; ! DEBUG RunTimeProblem(RTP_LOWLEVELERROR); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Argument Type Checking Failed ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ArgumentTypeFailed line file; RunTimeProblem(RTP_TYPECHECK, 0, 0, 0, line, file); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Return Type Checking Failed ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CheckKindReturned V K; if (V ofclass K) return V; if (v == nothing) RunTimeProblem(RTP_DECIDEONNOTHING); else RunTimeProblem(RTP_DECIDEONWRONGKIND); return V; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Whether Provides ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WhetherProvides obj either_or p issue_rtp off i textual a l; if (metaclass(obj) ~= Object) rfalse; if (p<0) p = ~p; if (either_or) { if (p < FBNA_PROP_NUMBER) off = attributed_property_offsets-->p; else off = valued_property_offsets-->p; } else off = valued_property_offsets-->p; if (off<0) { if (issue_rtp) RunTimeProblem(RTP_BADPROPERTY, obj); rfalse; } textual = property_metadata-->off; off++; if (ScanPropertyMetadata(obj, off)) jump PermissionFound; if (obj provides KD_Count) { l = obj.KD_Count; while (l > 0) { a = l*2; if (ScanPropertyMetadata(KindHierarchy-->a, off)) jump PermissionFound; l = KindHierarchy-->(a+1); } } if (issue_rtp) RunTimeProblem(RTP_UNPROVIDED, obj, textual); rfalse; .PermissionFound; if (either_or) rtrue; if (obj provides p) rtrue; if (issue_rtp) RunTimeProblem(RTP_UNSET, obj, textual); rfalse; ]; [ PrintPropertyName p off textual; if (p<0) p = ~p; off = valued_property_offsets-->p; textual = property_metadata-->off; print (string) textual; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Scan Property Metadata ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ScanPropertyMetadata obj off i; for (i=off: property_metadata-->i >= 0: i++) if (obj == property_metadata-->i) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Get Either-Or Property ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GetEitherOrProperty o p; if (o == nothing) rfalse; if (p<0) p = ~p; if (WhetherProvides(o, true, p, false)) { if (pK; if (obj == 0) { RunTimeProblem(RTP_PROPOFNOTHING, obj, pr); rfalse; } if (obj provides pr) { if (K == OBJECT_TY) { if (pr == door_to) return obj.pr(); if (WhetherProvides(V, false, pr, true)) return obj.pr; rfalse; } if (obj ofclass K0_kind) WhetherProvides(V, false, pr, true); ! to force a run-time problem if ((V < 1) || (V > obj.value_range)) { RunTimeProblem(RTP_BADVALUEPROPERTY); return 0; } return (obj.pr)-->(V+COL_HSIZE); } else { if (obj ofclass K0_kind) WhetherProvides(V, false, pr, true); ! to force a run-time problem } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Write Value Property ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WriteGProperty K V pr val obj; if (K == OBJECT_TY) obj = V; else obj = KOV_representatives-->K; if (obj == 0) { RunTimeProblem(RTP_PROPOFNOTHING, obj, pr); rfalse; } if (K == OBJECT_TY) { if (WhetherProvides(V, false, pr, true)) obj.pr = val; } else { if ((V < 1) || (V > obj.value_range)) return RunTimeProblem(RTP_BADVALUEPROPERTY); if (obj provides pr) { (obj.pr)-->(V+COL_HSIZE) = val; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RTP.i6t: Printing Property Names ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PROPERTY_TY_Say v; print "property ", v; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Rulebooks.i6t: Latest Rule Result ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RS_NEITHER = 0; Constant RS_SUCCEEDS = 1; Constant RS_FAILS = 2; Array latest_rule_result --> 3; [ RecordRuleOutcome usage rule1 rule2; if ((latest_rule_result-->0 == RS_SUCCEEDS or RS_FAILS) && (KOVIsBlockValue(latest_rule_result-->1))) BlkValueFree(latest_rule_result-->2); if ((usage == RS_SUCCEEDS or RS_FAILS) && (KOVIsBlockValue(rule1))) rule2 = BlkValueCopy(BlkValueCreate(rule1), rule2); latest_rule_result-->0 = usage; latest_rule_result-->1 = rule1; latest_rule_result-->2 = rule2; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Rulebooks.i6t: Following ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global process_rulebook_count; ! Depth of processing recursion Global debugging_rules = false; ! Are we tracing rule invocations? [ FollowRulebook rulebook parameter no_paragraph_skips rv ss spv; ss = self; if ((Protect_I7_Arrays-->0 ~= 16339) || (Protect_I7_Arrays-->1 ~= 12345)) { print "^^*** Fatal programming error: I7 arrays corrupted ***^^"; @quit; } if (parameter) { self = parameter; parameter_object = parameter; } spv = parameter_value; parameter_value = parameter; ! we won't need parameter again, so can reuse it parameter = debugging_rules; #ifndef MEMORY_ECONOMY; if (debugging_rules) { DebugRulebooks(rulebook, parameter); process_rulebook_count = process_rulebook_count + debugging_rules; } #endif; if ((rulebook >= 0) && (rulebook < NUMBER_RULEBOOKS_CREATED)) { rv = rulebooks_array-->rulebook; if (rv ~= EMPTY_RULEBOOK) { if (rulebook ~= ACTION_PROCESSING_RB) MStack_CreateRBVars(rulebook); if (say__p) RulebookParBreak(no_paragraph_skips); rv = rv(no_paragraph_skips); if (rulebook ~= ACTION_PROCESSING_RB) MStack_DestroyRBVars(rulebook); } else { rv = 0; } } else { if (say__p) RulebookParBreak(no_paragraph_skips); rv = indirect(rulebook); if (rv == 2) rv = reason_the_action_failed; else if (rv) rv = rulebook; } if (rv) { #ifndef MEMORY_ECONOMY; if (debugging_rules) { process_rulebook_count = process_rulebook_count - debugging_rules; if (process_rulebook_count < 0) process_rulebook_count = 0; spaces(2*process_rulebook_count); if (latest_rule_result-->0 == RS_SUCCEEDS) print "[stopped: success]^"; if (latest_rule_result-->0 == RS_FAILS) print "[stopped: fail]^"; } #endif; } else { if (debugging_rules) process_rulebook_count = process_rulebook_count - debugging_rules; latest_rule_result-->0 = RS_NEITHER; } debugging_rules = parameter; self = ss; parameter_value = spv; return rv; ]; [ RulebookParBreak no_paragraph_skips; if ((no_paragraph_skips == false) && (say__pc & PARA_NORULEBOOKBREAKS == 0)) DivideParagraphPoint(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Rulebooks.i6t: Specifying Outcomes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ActRulebookSucceeds rule_id; if (rule_id) reason_the_action_failed = rule_id; RulebookSucceeds(); ]; [ ActRulebookFails rule_id; if (rule_id) reason_the_action_failed = rule_id; RulebookFails(); ]; [ RulebookSucceeds weak_kind value; RecordRuleOutcome(RS_SUCCEEDS, weak_kind, value); ]; [ RulebookFails weak_kind value; RecordRuleOutcome(RS_FAILS, weak_kind, value); ]; [ RuleHasNoOutcome; RecordRuleOutcome(RS_NEITHER, 0, 0); ]; [ SetRulebookOutcome a; latest_rule_result-->0 = a; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Rulebooks.i6t: Discovering Outcomes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RulebookOutcome a; a = latest_rule_result-->0; if ((a == RS_FAILS) || (a == RS_SUCCEEDS)) return a; return RS_NEITHER; ]; [ RulebookFailed; if (latest_rule_result-->0 == RS_FAILS) rtrue; rfalse; ]; [ RulebookSucceeded; if (latest_rule_result-->0 == RS_SUCCEEDS) rtrue; rfalse; ]; [ ResultOfRule RB V F K a; if (RB) FollowRulebook(RB, V, F); a = latest_rule_result-->0; if ((a == RS_FAILS) || (a == RS_SUCCEEDS)) { a = latest_rule_result-->1; if (a) return latest_rule_result-->2; } if (K) return DefaultValueOfKOV(K); return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Rulebooks.i6t: Printing Rule Names ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFNDEF MEMORY_ECONOMY; Array RulebookNames --> "Startup rulebook" ! 0 "Turn sequence rulebook" ! 1 "Shutdown rulebook" ! 2 "Scene changing rulebook" ! 3 "When play begins rulebook" ! 4 "When play ends rulebook" ! 5 "When scene begins rulebook" ! 6 "When scene ends rulebook" ! 7 "Every turn rulebook" ! 8 "Action-processing rulebook" ! 9 "Setting action variables rulebook" ! 10 "specific action-processing rulebook" ! 11 "player's action awareness rulebook" ! 12 "Accessibility rulebook" ! 13 "Reaching inside rulebook" ! 14 "Reaching outside rulebook" ! 15 "Visibility rulebook" ! 16 "Persuasion rulebook" ! 17 "Unsuccessful attempt by rulebook" ! 18 "Before rulebook" ! 19 "Instead rulebook" ! 20 "Check rulebook" ! 21 "Carry out rulebook" ! 22 "After rulebook" ! 23 "Report rulebook" ! 24 "does the player mean rulebook" ! 25 "multiple action processing rulebook" ! 26 "when Entire Game begins rulebook" ! 27 "when Entire Game ends rulebook" ! 28 "before Printing the name rulebook" ! 29 "for Printing the name rulebook" ! 30 "after Printing the name rulebook" ! 31 "before Printing the plural name rulebook" ! 32 "for Printing the plural name rulebook" ! 33 "after Printing the plural name rulebook" ! 34 "before Printing a number rulebook" ! 35 "for Printing a number rulebook" ! 36 "after Printing a number rulebook" ! 37 "before Printing room description details rulebook" ! 38 "for Printing room description details rulebook" ! 39 "after Printing room description details rulebook" ! 40 "before Printing inventory details rulebook" ! 41 "for Printing inventory details rulebook" ! 42 "after Printing inventory details rulebook" ! 43 "before Listing contents rulebook" ! 44 "for Listing contents rulebook" ! 45 "after Listing contents rulebook" ! 46 "before Grouping together rulebook" ! 47 "for Grouping together rulebook" ! 48 "after Grouping together rulebook" ! 49 "before Writing a paragraph about rulebook" ! 50 "for Writing a paragraph about rulebook" ! 51 "after Writing a paragraph about rulebook" ! 52 "before Listing nondescript items rulebook" ! 53 "for Listing nondescript items rulebook" ! 54 "after Listing nondescript items rulebook" ! 55 "before Printing the name of a dark room rulebook" ! 56 "for Printing the name of a dark room rulebook" ! 57 "after Printing the name of a dark room rulebook" ! 58 "before Printing the description of a dark room rulebook" ! 59 "for Printing the description of a dark room rulebook" ! 60 "after Printing the description of a dark room rulebook" ! 61 "before Printing the announcement of darkness rulebook" ! 62 "for Printing the announcement of darkness rulebook" ! 63 "after Printing the announcement of darkness rulebook" ! 64 "before Printing the announcement of light rulebook" ! 65 "for Printing the announcement of light rulebook" ! 66 "after Printing the announcement of light rulebook" ! 67 "before Printing a refusal to act in the dark rulebook" ! 68 "for Printing a refusal to act in the dark rulebook" ! 69 "after Printing a refusal to act in the dark rulebook" ! 70 "before Constructing the status line rulebook" ! 71 "for Constructing the status line rulebook" ! 72 "after Constructing the status line rulebook" ! 73 "before Printing the banner text rulebook" ! 74 "for Printing the banner text rulebook" ! 75 "after Printing the banner text rulebook" ! 76 "before Reading a command rulebook" ! 77 "for Reading a command rulebook" ! 78 "after Reading a command rulebook" ! 79 "before Deciding the scope rulebook" ! 80 "for Deciding the scope rulebook" ! 81 "after Deciding the scope rulebook" ! 82 "before Deciding the concealed possessions rulebook" ! 83 "for Deciding the concealed possessions rulebook" ! 84 "after Deciding the concealed possessions rulebook" ! 85 "before Deciding whether all includes rulebook" ! 86 "for Deciding whether all includes rulebook" ! 87 "after Deciding whether all includes rulebook" ! 88 "before Clarifying the parser's choice rulebook" ! 89 "for Clarifying the parser's choice rulebook" ! 90 "after Clarifying the parser's choice rulebook" ! 91 "before Asking which do you mean rulebook" ! 92 "for Asking which do you mean rulebook" ! 93 "after Asking which do you mean rulebook" ! 94 "before Printing a parser error rulebook" ! 95 "for Printing a parser error rulebook" ! 96 "after Printing a parser error rulebook" ! 97 "before Supplying a missing noun rulebook" ! 98 "for Supplying a missing noun rulebook" ! 99 "after Supplying a missing noun rulebook" ! 100 "before Supplying a missing second noun rulebook" ! 101 "for Supplying a missing second noun rulebook" ! 102 "after Supplying a missing second noun rulebook" ! 103 "before Implicitly taking rulebook" ! 104 "for Implicitly taking rulebook" ! 105 "after Implicitly taking rulebook" ! 106 "before Starting the virtual machine rulebook" ! 107 "for Starting the virtual machine rulebook" ! 108 "after Starting the virtual machine rulebook" ! 109 "before Amusing a victorious player rulebook" ! 110 "for Amusing a victorious player rulebook" ! 111 "after Amusing a victorious player rulebook" ! 112 "before Printing the player's obituary rulebook" ! 113 "for Printing the player's obituary rulebook" ! 114 "after Printing the player's obituary rulebook" ! 115 "before Handling the final question rulebook" ! 116 "for Handling the final question rulebook" ! 117 "after Handling the final question rulebook" ! 118 "before Printing the locale description rulebook" ! 119 "for Printing the locale description rulebook" ! 120 "after Printing the locale description rulebook" ! 121 "before Choosing notable locale objects rulebook" ! 122 "for Choosing notable locale objects rulebook" ! 123 "after Choosing notable locale objects rulebook" ! 124 "before Printing a locale paragraph about rulebook" ! 125 "for Printing a locale paragraph about rulebook" ! 126 "after Printing a locale paragraph about rulebook" ! 127 "before Issuing the response text rulebook" ! 128 "for Issuing the response text rulebook" ! 129 "after Issuing the response text rulebook" ! 130 "check Taking inventory rulebook" ! 131 "carry out Taking inventory rulebook" ! 132 "report Taking inventory rulebook" ! 133 "check Taking rulebook" ! 134 "carry out Taking rulebook" ! 135 "report Taking rulebook" ! 136 "check Removing it from rulebook" ! 137 "carry out Removing it from rulebook" ! 138 "report Removing it from rulebook" ! 139 "check Dropping rulebook" ! 140 "carry out Dropping rulebook" ! 141 "report Dropping rulebook" ! 142 "check Putting it on rulebook" ! 143 "carry out Putting it on rulebook" ! 144 "report Putting it on rulebook" ! 145 "check Inserting it into rulebook" ! 146 "carry out Inserting it into rulebook" ! 147 "report Inserting it into rulebook" ! 148 "check Eating rulebook" ! 149 "carry out Eating rulebook" ! 150 "report Eating rulebook" ! 151 "check Going rulebook" ! 152 "carry out Going rulebook" ! 153 "report Going rulebook" ! 154 "check Entering rulebook" ! 155 "carry out Entering rulebook" ! 156 "report Entering rulebook" ! 157 "check Exiting rulebook" ! 158 "carry out Exiting rulebook" ! 159 "report Exiting rulebook" ! 160 "check Getting off rulebook" ! 161 "carry out Getting off rulebook" ! 162 "report Getting off rulebook" ! 163 "check Looking rulebook" ! 164 "carry out Looking rulebook" ! 165 "report Looking rulebook" ! 166 "check Examining rulebook" ! 167 "carry out Examining rulebook" ! 168 "report Examining rulebook" ! 169 "check Looking under rulebook" ! 170 "carry out Looking under rulebook" ! 171 "report Looking under rulebook" ! 172 "check Searching rulebook" ! 173 "carry out Searching rulebook" ! 174 "report Searching rulebook" ! 175 "check Consulting it about rulebook" ! 176 "carry out Consulting it about rulebook" ! 177 "report Consulting it about rulebook" ! 178 "check Locking it with rulebook" ! 179 "carry out Locking it with rulebook" ! 180 "report Locking it with rulebook" ! 181 "check Unlocking it with rulebook" ! 182 "carry out Unlocking it with rulebook" ! 183 "report Unlocking it with rulebook" ! 184 "check Switching on rulebook" ! 185 "carry out Switching on rulebook" ! 186 "report Switching on rulebook" ! 187 "check Switching off rulebook" ! 188 "carry out Switching off rulebook" ! 189 "report Switching off rulebook" ! 190 "check Opening rulebook" ! 191 "carry out Opening rulebook" ! 192 "report Opening rulebook" ! 193 "check Closing rulebook" ! 194 "carry out Closing rulebook" ! 195 "report Closing rulebook" ! 196 "check Wearing rulebook" ! 197 "carry out Wearing rulebook" ! 198 "report Wearing rulebook" ! 199 "check Taking off rulebook" ! 200 "carry out Taking off rulebook" ! 201 "report Taking off rulebook" ! 202 "check Giving it to rulebook" ! 203 "carry out Giving it to rulebook" ! 204 "report Giving it to rulebook" ! 205 "check Showing it to rulebook" ! 206 "carry out Showing it to rulebook" ! 207 "report Showing it to rulebook" ! 208 "check Waking rulebook" ! 209 "carry out Waking rulebook" ! 210 "report Waking rulebook" ! 211 "check Throwing it at rulebook" ! 212 "carry out Throwing it at rulebook" ! 213 "report Throwing it at rulebook" ! 214 "check Attacking rulebook" ! 215 "carry out Attacking rulebook" ! 216 "report Attacking rulebook" ! 217 "check Kissing rulebook" ! 218 "carry out Kissing rulebook" ! 219 "report Kissing rulebook" ! 220 "check Answering it that rulebook" ! 221 "carry out Answering it that rulebook" ! 222 "report Answering it that rulebook" ! 223 "check Telling it about rulebook" ! 224 "carry out Telling it about rulebook" ! 225 "report Telling it about rulebook" ! 226 "check Asking it about rulebook" ! 227 "carry out Asking it about rulebook" ! 228 "report Asking it about rulebook" ! 229 "check Asking it for rulebook" ! 230 "carry out Asking it for rulebook" ! 231 "report Asking it for rulebook" ! 232 "check Waiting rulebook" ! 233 "carry out Waiting rulebook" ! 234 "report Waiting rulebook" ! 235 "check Touching rulebook" ! 236 "carry out Touching rulebook" ! 237 "report Touching rulebook" ! 238 "check Waving rulebook" ! 239 "carry out Waving rulebook" ! 240 "report Waving rulebook" ! 241 "check Pulling rulebook" ! 242 "carry out Pulling rulebook" ! 243 "report Pulling rulebook" ! 244 "check Pushing rulebook" ! 245 "carry out Pushing rulebook" ! 246 "report Pushing rulebook" ! 247 "check Turning rulebook" ! 248 "carry out Turning rulebook" ! 249 "report Turning rulebook" ! 250 "check Pushing it to rulebook" ! 251 "carry out Pushing it to rulebook" ! 252 "report Pushing it to rulebook" ! 253 "check Squeezing rulebook" ! 254 "carry out Squeezing rulebook" ! 255 "report Squeezing rulebook" ! 256 "check Saying yes rulebook" ! 257 "carry out Saying yes rulebook" ! 258 "report Saying yes rulebook" ! 259 "check Saying no rulebook" ! 260 "carry out Saying no rulebook" ! 261 "report Saying no rulebook" ! 262 "check Burning rulebook" ! 263 "carry out Burning rulebook" ! 264 "report Burning rulebook" ! 265 "check Waking up rulebook" ! 266 "carry out Waking up rulebook" ! 267 "report Waking up rulebook" ! 268 "check Thinking rulebook" ! 269 "carry out Thinking rulebook" ! 270 "report Thinking rulebook" ! 271 "check Smelling rulebook" ! 272 "carry out Smelling rulebook" ! 273 "report Smelling rulebook" ! 274 "check Listening to rulebook" ! 275 "carry out Listening to rulebook" ! 276 "report Listening to rulebook" ! 277 "check Tasting rulebook" ! 278 "carry out Tasting rulebook" ! 279 "report Tasting rulebook" ! 280 "check Cutting rulebook" ! 281 "carry out Cutting rulebook" ! 282 "report Cutting rulebook" ! 283 "check Jumping rulebook" ! 284 "carry out Jumping rulebook" ! 285 "report Jumping rulebook" ! 286 "check Tying it to rulebook" ! 287 "carry out Tying it to rulebook" ! 288 "report Tying it to rulebook" ! 289 "check Drinking rulebook" ! 290 "carry out Drinking rulebook" ! 291 "report Drinking rulebook" ! 292 "check Saying sorry rulebook" ! 293 "carry out Saying sorry rulebook" ! 294 "report Saying sorry rulebook" ! 295 "check Swinging rulebook" ! 296 "carry out Swinging rulebook" ! 297 "report Swinging rulebook" ! 298 "check Rubbing rulebook" ! 299 "carry out Rubbing rulebook" ! 300 "report Rubbing rulebook" ! 301 "check Setting it to rulebook" ! 302 "carry out Setting it to rulebook" ! 303 "report Setting it to rulebook" ! 304 "check Waving hands rulebook" ! 305 "carry out Waving hands rulebook" ! 306 "report Waving hands rulebook" ! 307 "check Buying rulebook" ! 308 "carry out Buying rulebook" ! 309 "report Buying rulebook" ! 310 "check Climbing rulebook" ! 311 "carry out Climbing rulebook" ! 312 "report Climbing rulebook" ! 313 "check Sleeping rulebook" ! 314 "carry out Sleeping rulebook" ! 315 "report Sleeping rulebook" ! 316 "check Quitting the game rulebook" ! 317 "carry out Quitting the game rulebook" ! 318 "report Quitting the game rulebook" ! 319 "check Saving the game rulebook" ! 320 "carry out Saving the game rulebook" ! 321 "report Saving the game rulebook" ! 322 "check Restoring the game rulebook" ! 323 "carry out Restoring the game rulebook" ! 324 "report Restoring the game rulebook" ! 325 "check Restarting the game rulebook" ! 326 "carry out Restarting the game rulebook" ! 327 "report Restarting the game rulebook" ! 328 "check Verifying the story file rulebook" ! 329 "carry out Verifying the story file rulebook" ! 330 "report Verifying the story file rulebook" ! 331 "check Switching the story transcript on rulebook" ! 332 "carry out Switching the story transcript on rulebook" ! 333 "report Switching the story transcript on rulebook" ! 334 "check Switching the story transcript off rulebook" ! 335 "carry out Switching the story transcript off rulebook" ! 336 "report Switching the story transcript off rulebook" ! 337 "check Requesting the story file version rulebook" ! 338 "carry out Requesting the story file version rulebook" ! 339 "report Requesting the story file version rulebook" ! 340 "check Requesting the score rulebook" ! 341 "carry out Requesting the score rulebook" ! 342 "report Requesting the score rulebook" ! 343 "check Preferring abbreviated room descriptions rulebook" ! 344 "carry out Preferring abbreviated room descriptions rulebook" ! 345 "report Preferring abbreviated room descriptions rulebook" ! 346 "check Preferring unabbreviated room descriptions rulebook" ! 347 "carry out Preferring unabbreviated room descriptions rulebook" ! 348 "report Preferring unabbreviated room descriptions rulebook" ! 349 "check Preferring sometimes abbreviated room descriptions rulebook" ! 350 "carry out Preferring sometimes abbreviated room descriptions rulebook" ! 351 "report Preferring sometimes abbreviated room descriptions rulebook" ! 352 "check Switching score notification on rulebook" ! 353 "carry out Switching score notification on rulebook" ! 354 "report Switching score notification on rulebook" ! 355 "check Switching score notification off rulebook" ! 356 "carry out Switching score notification off rulebook" ! 357 "report Switching score notification off rulebook" ! 358 "check Requesting the pronoun meanings rulebook" ! 359 "carry out Requesting the pronoun meanings rulebook" ! 360 "report Requesting the pronoun meanings rulebook" ! 361 "before Pausing the game rulebook" ! 362 "for Pausing the game rulebook" ! 363 "after Pausing the game rulebook" ! 364 "before Refusing keys rulebook" ! 365 "for Refusing keys rulebook" ! 366 "after Refusing keys rulebook" ! 367 "check Unlocking keylessly rulebook" ! 368 "carry out Unlocking keylessly rulebook" ! 369 "report Unlocking keylessly rulebook" ! 370 "check Locking keylessly rulebook" ! 371 "carry out Locking keylessly rulebook" ! 372 "report Locking keylessly rulebook" ! 373 "when Mystery begins rulebook" ! 374 "when Mystery ends rulebook" ! 375 "check Escaping rulebook" ! 376 "carry out Escaping rulebook" ! 377 "report Escaping rulebook" ! 378 "check Typing rulebook" ! 379 "carry out Typing rulebook" ! 380 "report Typing rulebook" ! 381 "check Unscrewing rulebook" ! 382 "carry out Unscrewing rulebook" ! 383 "report Unscrewing rulebook" ! 384 "when Discovery begins rulebook" ! 385 "when Discovery ends rulebook" ! 386 "check Helping rulebook" ! 387 "carry out Helping rulebook" ! 388 "report Helping rulebook" ! 389 "check Hinting rulebook" ! 390 "carry out Hinting rulebook" ! 391 "report Hinting rulebook" ! 392 ; #ENDIF; ! MEMORY_ECONOMY [ RulePrintingRule R p1; #ifndef MEMORY_ECONOMY; if ((R>=0) && (RR); } else { if (R == R_9) { print "declare everything initially unmentioned rule"; rtrue; } ! rule 0 if (R == R_10) { print "start in the correct scenes rule"; rtrue; } ! rule 1 if (R == R_11) { print "when play begins stage rule"; rtrue; } ! rule 2 if (R == R_12) { print "fix baseline scoring rule"; rtrue; } ! rule 3 if (R == R_13) { print "display banner rule"; rtrue; } ! rule 4 if (R == R_14) { print "initial room description rule"; rtrue; } ! rule 5 if (R == R_15) { print "every turn stage rule"; rtrue; } ! rule 6 if (R == R_18) { print "notify score changes rule"; rtrue; } ! rule 7 if (R == R_19) { print "when play ends stage rule"; rtrue; } ! rule 8 if (R == R_20) { print "print player's obituary rule"; rtrue; } ! rule 9 if (R == R_21) { print "set pronouns from items from multiple object lists rule"; rtrue; } ! rule 10 if (R == R_22) { print "announce items from multiple object lists rule"; rtrue; } ! rule 11 if (R == R_23) { print "before stage rule"; rtrue; } ! rule 12 if (R == R_24) { print "instead stage rule"; rtrue; } ! rule 13 if (R == R_25) { print "end action-processing in success rule"; rtrue; } ! rule 14 if (R == R_26) { print "investigate player's awareness before action rule"; rtrue; } ! rule 15 if (R == R_27) { print "check stage rule"; rtrue; } ! rule 16 if (R == R_28) { print "carry out stage rule"; rtrue; } ! rule 17 if (R == R_29) { print "after stage rule"; rtrue; } ! rule 18 if (R == R_30) { print "investigate player's awareness after action rule"; rtrue; } ! rule 19 if (R == R_31) { print "report stage rule"; rtrue; } ! rule 20 if (R == R_33) { print "player aware of his own actions rule"; rtrue; } ! rule 21 if (R == R_34) { print "player aware of actions by visible actors rule"; rtrue; } ! rule 22 if (R == R_35) { print "player aware of actions on visible nouns rule"; rtrue; } ! rule 23 if (R == R_36) { print "player aware of actions on visible second nouns rule"; rtrue; } ! rule 24 if (R == R_37) { print "can't act in the dark rule"; rtrue; } ! rule 25 if (R == R_38) { print "very unlikely to mean taking what's already carried rule"; rtrue; } ! rule 26 if (R == R_65) { print "scene description text rule"; rtrue; } ! rule 27 if (R == R_66) { print "make named things mentioned rule"; rtrue; } ! rule 28 if (R == R_67) { print "standard printing the plural name rule"; rtrue; } ! rule 29 if (R == R_68) { print "standard printing a number of something rule"; rtrue; } ! rule 30 if (R == R_69) { print "look around once light available rule"; rtrue; } ! rule 31 if (R == R_70) { print "exclude scenery from take all rule"; rtrue; } ! rule 32 if (R == R_71) { print "exclude people from take all rule"; rtrue; } ! rule 33 if (R == R_72) { print "exclude fixed in place things from take all rule"; rtrue; } ! rule 34 if (R == R_73) { print "exclude indirect possessions from take all rule"; rtrue; } ! rule 35 if (R == R_74) { print "exclude people from drop all rule"; rtrue; } ! rule 36 if (R == R_75) { print "ambient odour rule"; rtrue; } ! rule 37 if (R == R_76) { print "ambient sound rule"; rtrue; } ! rule 38 if (R == R_77) { print "block vaguely going rule"; rtrue; } ! rule 39 if (R == R_78) { print "print the final prompt rule"; rtrue; } ! rule 40 if (R == R_79) { print "print the final question rule"; rtrue; } ! rule 41 if (R == R_80) { print "standard respond to final question rule"; rtrue; } ! rule 42 if (R == R_83) { print "initialise locale description rule"; rtrue; } ! rule 43 if (R == R_84) { print "find notable locale objects rule"; rtrue; } ! rule 44 if (R == R_85) { print "interesting locale paragraphs rule"; rtrue; } ! rule 45 if (R == R_86) { print "you-can-also-see rule"; rtrue; } ! rule 46 if (R == R_87) { print "standard notable locale objects rule"; rtrue; } ! rule 47 if (R == R_88) { print "don't mention player's supporter in room descriptions rule"; rtrue; } ! rule 48 if (R == R_89) { print "don't mention scenery in room descriptions rule"; rtrue; } ! rule 49 if (R == R_90) { print "don't mention undescribed items in room descriptions rule"; rtrue; } ! rule 50 if (R == R_91) { print "set pronouns from items in room descriptions rule"; rtrue; } ! rule 51 if (R == R_92) { print "offer items to writing a paragraph about rule"; rtrue; } ! rule 52 if (R == R_93) { print "use initial appearance in room descriptions rule"; rtrue; } ! rule 53 if (R == R_94) { print "initial appearance on supporters rule"; rtrue; } ! rule 54 if (R == R_96) { print "describe what's on scenery supporters in room descriptions rule"; rtrue; } ! rule 55 if (R == R_97) { print "describe what's on mentioned supporters in room descriptions rule"; rtrue; } ! rule 56 if (R == R_98) { print "print empty inventory rule"; rtrue; } ! rule 57 if (R == R_99) { print "print standard inventory rule"; rtrue; } ! rule 58 if (R == R_100) { print "report other people taking inventory rule"; rtrue; } ! rule 59 if (R == R_101) { print "can't take yourself rule"; rtrue; } ! rule 60 if (R == R_102) { print "can't take other people rule"; rtrue; } ! rule 61 if (R == R_103) { print "can't take component parts rule"; rtrue; } ! rule 62 if (R == R_104) { print "can't take people's possessions rule"; rtrue; } ! rule 63 if (R == R_105) { print "can't take items out of play rule"; rtrue; } ! rule 64 if (R == R_106) { print "can't take what you're inside rule"; rtrue; } ! rule 65 if (R == R_107) { print "can't take what's already taken rule"; rtrue; } ! rule 66 if (R == R_108) { print "can't take scenery rule"; rtrue; } ! rule 67 if (R == R_109) { print "can only take things rule"; rtrue; } ! rule 68 if (R == R_110) { print "can't take what's fixed in place rule"; rtrue; } ! rule 69 if (R == R_111) { print "use player's holdall to avoid exceeding carrying capacity rule"; rtrue; } ! rule 70 if (R == R_112) { print "can't exceed carrying capacity rule"; rtrue; } ! rule 71 if (R == R_113) { print "standard taking rule"; rtrue; } ! rule 72 if (R == R_114) { print "standard report taking rule"; rtrue; } ! rule 73 if (R == R_115) { print "can't remove what's not inside rule"; rtrue; } ! rule 74 if (R == R_116) { print "can't remove from people rule"; rtrue; } ! rule 75 if (R == R_117) { print "convert remove to take rule"; rtrue; } ! rule 76 if (R == R_118) { print "can't drop yourself rule"; rtrue; } ! rule 77 if (R == R_119) { print "can't drop body parts rule"; rtrue; } ! rule 78 if (R == R_120) { print "can't drop what's already dropped rule"; rtrue; } ! rule 79 if (R == R_121) { print "can't drop what's not held rule"; rtrue; } ! rule 80 if (R == R_122) { print "can't drop clothes being worn rule"; rtrue; } ! rule 81 if (R == R_123) { print "can't drop if this exceeds carrying capacity rule"; rtrue; } ! rule 82 if (R == R_124) { print "standard dropping rule"; rtrue; } ! rule 83 if (R == R_125) { print "standard report dropping rule"; rtrue; } ! rule 84 if (R == R_126) { print "convert put to drop where possible rule"; rtrue; } ! rule 85 if (R == R_127) { print "can't put what's not held rule"; rtrue; } ! rule 86 if (R == R_128) { print "can't put something on itself rule"; rtrue; } ! rule 87 if (R == R_129) { print "can't put onto what's not a supporter rule"; rtrue; } ! rule 88 if (R == R_130) { print "can't put clothes being worn rule"; rtrue; } ! rule 89 if (R == R_131) { print "can't put if this exceeds carrying capacity rule"; rtrue; } ! rule 90 if (R == R_132) { print "standard putting rule"; rtrue; } ! rule 91 if (R == R_133) { print "concise report putting rule"; rtrue; } ! rule 92 if (R == R_134) { print "standard report putting rule"; rtrue; } ! rule 93 if (R == R_135) { print "convert insert to drop where possible rule"; rtrue; } ! rule 94 if (R == R_136) { print "can't insert what's not held rule"; rtrue; } ! rule 95 if (R == R_137) { print "can't insert something into itself rule"; rtrue; } ! rule 96 if (R == R_138) { print "can't insert into closed containers rule"; rtrue; } ! rule 97 if (R == R_139) { print "can't insert into what's not a container rule"; rtrue; } ! rule 98 if (R == R_140) { print "can't insert clothes being worn rule"; rtrue; } ! rule 99 if (R == R_141) { print "can't insert if this exceeds carrying capacity rule"; rtrue; } ! rule 100 if (R == R_142) { print "standard inserting rule"; rtrue; } ! rule 101 if (R == R_143) { print "concise report inserting rule"; rtrue; } ! rule 102 if (R == R_144) { print "standard report inserting rule"; rtrue; } ! rule 103 if (R == R_145) { print "can't eat unless edible rule"; rtrue; } ! rule 104 if (R == R_146) { print "can't eat clothing without removing it first rule"; rtrue; } ! rule 105 if (R == R_147) { print "can't eat other people's food rule"; rtrue; } ! rule 106 if (R == R_148) { print "can't eat portable food without carrying it rule"; rtrue; } ! rule 107 if (R == R_149) { print "standard eating rule"; rtrue; } ! rule 108 if (R == R_150) { print "standard report eating rule"; rtrue; } ! rule 109 if (R == R_151) { print "standard set going variables rule"; rtrue; } ! rule 110 if (R == R_152) { print "stand up before going rule"; rtrue; } ! rule 111 if (R == R_153) { print "can't travel in what's not a vehicle rule"; rtrue; } ! rule 112 if (R == R_154) { print "can't go through undescribed doors rule"; rtrue; } ! rule 113 if (R == R_155) { print "can't go through closed doors rule"; rtrue; } ! rule 114 if (R == R_156) { print "determine map connection rule"; rtrue; } ! rule 115 if (R == R_157) { print "can't go that way rule"; rtrue; } ! rule 116 if (R == R_158) { print "move player and vehicle rule"; rtrue; } ! rule 117 if (R == R_159) { print "move floating objects rule"; rtrue; } ! rule 118 if (R == R_160) { print "check light in new location rule"; rtrue; } ! rule 119 if (R == R_161) { print "describe room gone into rule"; rtrue; } ! rule 120 if (R == R_162) { print "find what to enter rule"; rtrue; } ! rule 121 if (R == R_163) { print "convert enter door into go rule"; rtrue; } ! rule 122 if (R == R_164) { print "convert enter compass direction into go rule"; rtrue; } ! rule 123 if (R == R_165) { print "can't enter what's already entered rule"; rtrue; } ! rule 124 if (R == R_166) { print "can't enter what's not enterable rule"; rtrue; } ! rule 125 if (R == R_167) { print "can't enter closed containers rule"; rtrue; } ! rule 126 if (R == R_168) { print "can't enter if this exceeds carrying capacity rule"; rtrue; } ! rule 127 if (R == R_169) { print "can't enter something carried rule"; rtrue; } ! rule 128 if (R == R_170) { print "implicitly pass through other barriers rule"; rtrue; } ! rule 129 if (R == R_171) { print "standard entering rule"; rtrue; } ! rule 130 if (R == R_172) { print "standard report entering rule"; rtrue; } ! rule 131 if (R == R_173) { print "describe contents entered into rule"; rtrue; } ! rule 132 if (R == R_175) { print "convert exit into go out rule"; rtrue; } ! rule 133 if (R == R_176) { print "can't exit when not inside anything rule"; rtrue; } ! rule 134 if (R == R_177) { print "can't exit closed containers rule"; rtrue; } ! rule 135 if (R == R_178) { print "convert exit into get off rule"; rtrue; } ! rule 136 if (R == R_179) { print "standard exiting rule"; rtrue; } ! rule 137 if (R == R_180) { print "standard report exiting rule"; rtrue; } ! rule 138 if (R == R_181) { print "describe room emerged into rule"; rtrue; } ! rule 139 if (R == R_182) { print "can't get off things rule"; rtrue; } ! rule 140 if (R == R_183) { print "standard getting off rule"; rtrue; } ! rule 141 if (R == R_184) { print "standard report getting off rule"; rtrue; } ! rule 142 if (R == R_185) { print "describe room stood up into rule"; rtrue; } ! rule 143 if (R == R_186) { print "determine visibility ceiling rule"; rtrue; } ! rule 144 if (R == R_187) { print "declare everything unmentioned rule"; rtrue; } ! rule 145 if (R == R_188) { print "room description heading rule"; rtrue; } ! rule 146 if (R == R_189) { print "room description body text rule"; rtrue; } ! rule 147 if (R == R_190) { print "room description paragraphs about objects rule"; rtrue; } ! rule 148 if (R == R_191) { print "check new arrival rule"; rtrue; } ! rule 149 if (R == R_192) { print "other people looking rule"; rtrue; } ! rule 150 if (R == R_193) { print "standard examining rule"; rtrue; } ! rule 151 if (R == R_194) { print "examine directions rule"; rtrue; } ! rule 152 if (R == R_195) { print "examine containers rule"; rtrue; } ! rule 153 if (R == R_196) { print "examine supporters rule"; rtrue; } ! rule 154 if (R == R_197) { print "examine devices rule"; rtrue; } ! rule 155 if (R == R_198) { print "examine undescribed things rule"; rtrue; } ! rule 156 if (R == R_199) { print "report other people examining rule"; rtrue; } ! rule 157 if (R == R_200) { print "standard looking under rule"; rtrue; } ! rule 158 if (R == R_201) { print "report other people looking under rule"; rtrue; } ! rule 159 if (R == R_202) { print "can't search unless container or supporter rule"; rtrue; } ! rule 160 if (R == R_203) { print "can't search closed opaque containers rule"; rtrue; } ! rule 161 if (R == R_204) { print "standard search containers rule"; rtrue; } ! rule 162 if (R == R_205) { print "standard search supporters rule"; rtrue; } ! rule 163 if (R == R_206) { print "report other people searching rule"; rtrue; } ! rule 164 if (R == R_207) { print "block consulting rule"; rtrue; } ! rule 165 if (R == R_208) { print "can't lock without a lock rule"; rtrue; } ! rule 166 if (R == R_209) { print "can't lock what's already locked rule"; rtrue; } ! rule 167 if (R == R_210) { print "can't lock what's open rule"; rtrue; } ! rule 168 if (R == R_211) { print "can't lock without the correct key rule"; rtrue; } ! rule 169 if (R == R_212) { print "standard locking rule"; rtrue; } ! rule 170 if (R == R_213) { print "standard report locking rule"; rtrue; } ! rule 171 if (R == R_214) { print "can't unlock without a lock rule"; rtrue; } ! rule 172 if (R == R_215) { print "can't unlock what's already unlocked rule"; rtrue; } ! rule 173 if (R == R_216) { print "can't unlock without the correct key rule"; rtrue; } ! rule 174 if (R == R_217) { print "standard unlocking rule"; rtrue; } ! rule 175 if (R == R_218) { print "standard report unlocking rule"; rtrue; } ! rule 176 if (R == R_219) { print "can't switch on unless switchable rule"; rtrue; } ! rule 177 if (R == R_220) { print "can't switch on what's already on rule"; rtrue; } ! rule 178 if (R == R_221) { print "standard switching on rule"; rtrue; } ! rule 179 if (R == R_222) { print "standard report switching on rule"; rtrue; } ! rule 180 if (R == R_223) { print "can't switch off unless switchable rule"; rtrue; } ! rule 181 if (R == R_224) { print "can't switch off what's already off rule"; rtrue; } ! rule 182 if (R == R_225) { print "standard switching off rule"; rtrue; } ! rule 183 if (R == R_226) { print "standard report switching off rule"; rtrue; } ! rule 184 if (R == R_227) { print "can't open unless openable rule"; rtrue; } ! rule 185 if (R == R_228) { print "can't open what's locked rule"; rtrue; } ! rule 186 if (R == R_229) { print "can't open what's already open rule"; rtrue; } ! rule 187 if (R == R_230) { print "standard opening rule"; rtrue; } ! rule 188 if (R == R_231) { print "reveal any newly visible interior rule"; rtrue; } ! rule 189 if (R == R_232) { print "standard report opening rule"; rtrue; } ! rule 190 if (R == R_233) { print "can't close unless openable rule"; rtrue; } ! rule 191 if (R == R_234) { print "can't close what's already closed rule"; rtrue; } ! rule 192 if (R == R_235) { print "standard closing rule"; rtrue; } ! rule 193 if (R == R_236) { print "standard report closing rule"; rtrue; } ! rule 194 if (R == R_237) { print "can't wear what's not clothing rule"; rtrue; } ! rule 195 if (R == R_238) { print "can't wear what's not held rule"; rtrue; } ! rule 196 if (R == R_239) { print "can't wear what's already worn rule"; rtrue; } ! rule 197 if (R == R_240) { print "standard wearing rule"; rtrue; } ! rule 198 if (R == R_241) { print "standard report wearing rule"; rtrue; } ! rule 199 if (R == R_243) { print "can't take off what's not worn rule"; rtrue; } ! rule 200 if (R == R_244) { print "can't exceed carrying capacity when taking off rule"; rtrue; } ! rule 201 if (R == R_245) { print "standard taking off rule"; rtrue; } ! rule 202 if (R == R_246) { print "standard report taking off rule"; rtrue; } ! rule 203 if (R == R_247) { print "can't give what you haven't got rule"; rtrue; } ! rule 204 if (R == R_248) { print "can't give to yourself rule"; rtrue; } ! rule 205 if (R == R_249) { print "can't give to a non-person rule"; rtrue; } ! rule 206 if (R == R_250) { print "can't give clothes being worn rule"; rtrue; } ! rule 207 if (R == R_251) { print "block giving rule"; rtrue; } ! rule 208 if (R == R_252) { print "can't exceed carrying capacity when giving rule"; rtrue; } ! rule 209 if (R == R_253) { print "standard giving rule"; rtrue; } ! rule 210 if (R == R_254) { print "standard report giving rule"; rtrue; } ! rule 211 if (R == R_255) { print "can't show what you haven't got rule"; rtrue; } ! rule 212 if (R == R_256) { print "convert show to yourself to examine rule"; rtrue; } ! rule 213 if (R == R_257) { print "block showing rule"; rtrue; } ! rule 214 if (R == R_258) { print "block waking rule"; rtrue; } ! rule 215 if (R == R_259) { print "implicitly remove thrown clothing rule"; rtrue; } ! rule 216 if (R == R_260) { print "futile to throw things at inanimate objects rule"; rtrue; } ! rule 217 if (R == R_261) { print "block throwing at rule"; rtrue; } ! rule 218 if (R == R_262) { print "block attacking rule"; rtrue; } ! rule 219 if (R == R_263) { print "kissing yourself rule"; rtrue; } ! rule 220 if (R == R_264) { print "block kissing rule"; rtrue; } ! rule 221 if (R == R_265) { print "block answering rule"; rtrue; } ! rule 222 if (R == R_266) { print "telling yourself rule"; rtrue; } ! rule 223 if (R == R_267) { print "block telling rule"; rtrue; } ! rule 224 if (R == R_268) { print "block asking rule"; rtrue; } ! rule 225 if (R == R_269) { print "asking yourself for something rule"; rtrue; } ! rule 226 if (R == R_270) { print "translate asking for to giving rule"; rtrue; } ! rule 227 if (R == R_271) { print "standard report waiting rule"; rtrue; } ! rule 228 if (R == R_272) { print "report touching yourself rule"; rtrue; } ! rule 229 if (R == R_273) { print "report touching other people rule"; rtrue; } ! rule 230 if (R == R_274) { print "report touching things rule"; rtrue; } ! rule 231 if (R == R_275) { print "can't wave what's not held rule"; rtrue; } ! rule 232 if (R == R_276) { print "report waving things rule"; rtrue; } ! rule 233 if (R == R_277) { print "can't pull what's fixed in place rule"; rtrue; } ! rule 234 if (R == R_278) { print "can't pull scenery rule"; rtrue; } ! rule 235 if (R == R_279) { print "can't pull people rule"; rtrue; } ! rule 236 if (R == R_280) { print "report pulling rule"; rtrue; } ! rule 237 if (R == R_281) { print "can't push what's fixed in place rule"; rtrue; } ! rule 238 if (R == R_282) { print "can't push scenery rule"; rtrue; } ! rule 239 if (R == R_283) { print "can't push people rule"; rtrue; } ! rule 240 if (R == R_284) { print "report pushing rule"; rtrue; } ! rule 241 if (R == R_285) { print "can't turn what's fixed in place rule"; rtrue; } ! rule 242 if (R == R_286) { print "can't turn scenery rule"; rtrue; } ! rule 243 if (R == R_287) { print "can't turn people rule"; rtrue; } ! rule 244 if (R == R_288) { print "report turning rule"; rtrue; } ! rule 245 if (R == R_289) { print "can't push unpushable things rule"; rtrue; } ! rule 246 if (R == R_290) { print "can't push to non-directions rule"; rtrue; } ! rule 247 if (R == R_291) { print "can't push vertically rule"; rtrue; } ! rule 248 if (R == R_292) { print "can't push from within rule"; rtrue; } ! rule 249 if (R == R_293) { print "standard pushing in directions rule"; rtrue; } ! rule 250 if (R == R_294) { print "block pushing in directions rule"; rtrue; } ! rule 251 if (R == R_295) { print "innuendo about squeezing people rule"; rtrue; } ! rule 252 if (R == R_296) { print "report squeezing rule"; rtrue; } ! rule 253 if (R == R_297) { print "block saying yes rule"; rtrue; } ! rule 254 if (R == R_298) { print "block saying no rule"; rtrue; } ! rule 255 if (R == R_299) { print "block burning rule"; rtrue; } ! rule 256 if (R == R_300) { print "block waking up rule"; rtrue; } ! rule 257 if (R == R_301) { print "block thinking rule"; rtrue; } ! rule 258 if (R == R_302) { print "report smelling rule"; rtrue; } ! rule 259 if (R == R_303) { print "report listening rule"; rtrue; } ! rule 260 if (R == R_304) { print "report tasting rule"; rtrue; } ! rule 261 if (R == R_305) { print "block cutting rule"; rtrue; } ! rule 262 if (R == R_306) { print "report jumping rule"; rtrue; } ! rule 263 if (R == R_307) { print "block tying rule"; rtrue; } ! rule 264 if (R == R_308) { print "block drinking rule"; rtrue; } ! rule 265 if (R == R_309) { print "block saying sorry rule"; rtrue; } ! rule 266 if (R == R_310) { print "block swinging rule"; rtrue; } ! rule 267 if (R == R_311) { print "can't rub another person rule"; rtrue; } ! rule 268 if (R == R_312) { print "report rubbing rule"; rtrue; } ! rule 269 if (R == R_313) { print "block setting it to rule"; rtrue; } ! rule 270 if (R == R_314) { print "report waving hands rule"; rtrue; } ! rule 271 if (R == R_315) { print "block buying rule"; rtrue; } ! rule 272 if (R == R_316) { print "block climbing rule"; rtrue; } ! rule 273 if (R == R_317) { print "block sleeping rule"; rtrue; } ! rule 274 if (R == R_805) { print "standard pausing the game rule"; rtrue; } ! rule 275 if (R == R_817) { print "opening doors before entering rule"; rtrue; } ! rule 276 if (R == R_818) { print "closing doors before locking rule"; rtrue; } ! rule 277 if (R == R_819) { print "closing doors before locking keylessly rule"; rtrue; } ! rule 278 if (R == R_820) { print "unlocking before opening rule"; rtrue; } ! rule 279 if (R == R_821) { print "intelligently opening doors rule"; rtrue; } ! rule 280 if (R == R_822) { print "intelligently closing doors rule"; rtrue; } ! rule 281 if (R == R_823) { print "intelligently closing keyless doors rule"; rtrue; } ! rule 282 if (R == R_824) { print "intelligently opening containers rule"; rtrue; } ! rule 283 if (R == R_825) { print "need a matching key rule"; rtrue; } ! rule 284 if (R == R_827) { print "standard printing key lack rule"; rtrue; } ! rule 285 if (R == R_829) { print "must be able to reach the key rule"; rtrue; } ! rule 286 if (R == R_830) { print "right second rule"; rtrue; } ! rule 287 if (R == R_831) { print "check keylessly unlocking rule"; rtrue; } ! rule 288 if (R == R_832) { print "standard keylessly unlocking rule"; rtrue; } ! rule 289 if (R == R_834) { print "check keylessly locking rule"; rtrue; } ! rule 290 if (R == R_835) { print "standard keylessly locking rule"; rtrue; } ! rule 291 if (R == R_837) { print "identify passkeys in inventory rule"; rtrue; } ! rule 292 if (R == R_838) { print "passkey description rule"; rtrue; } ! rule 293 if (R == R_839) { print "standard passkey unlocking rule"; rtrue; } ! rule 294 if (R == R_840) { print "observe someone unlocking rule"; rtrue; } ! rule 295 if (R == R_841) { print "standard passkey locking rule"; rtrue; } ! rule 296 if (R == R_842) { print "observe someone locking rule"; rtrue; } ! rule 297 if (R == R_843) { print "limiting keychains rule"; rtrue; } ! rule 298 if (R == R_844) { print "keychain-aware carrying requirements rule"; rtrue; } ! rule 299 if (R == R_845) { print "don't strip keys rule"; rtrue; } ! rule 300 if (R == R_846) { print "noun autotaking rule"; rtrue; } ! rule 301 if (R == R_847) { print "second noun autotaking rule"; rtrue; } ! rule 302 if (R == R_848) { print "must hold the noun rule"; rtrue; } ! rule 303 if (R == R_849) { print "must hold the second noun rule"; rtrue; } ! rule 304 if (R == R_850) { print "must have accessible the noun rule"; rtrue; } ! rule 305 if (R == R_851) { print "must have accessible the second noun rule"; rtrue; } ! rule 306 if (R == LITTLE_USED_DO_NOTHING_R) { print "little-used do nothing rule"; rtrue; } ! rule 307 if (R == VIRTUAL_MACHINE_STARTUP_R) { print "virtual machine startup rule"; rtrue; } ! rule 308 if (R == INITIALISE_MEMORY_R) { print "initialise memory rule"; rtrue; } ! rule 309 if (R == SEED_RANDOM_NUMBER_GENERATOR_R) { print "seed random number generator rule"; rtrue; } ! rule 310 if (R == UPDATE_CHRONOLOGICAL_RECORDS_R) { print "update chronological records rule"; rtrue; } ! rule 311 if (R == POSITION_PLAYER_IN_MODEL_R) { print "position player in model world rule"; rtrue; } ! rule 312 if (R == ADJUST_LIGHT_R) { print "adjust light rule"; rtrue; } ! rule 313 if (R == ADVANCE_TIME_R) { print "advance time rule"; rtrue; } ! rule 314 if (R == GENERATE_ACTION_R) { print "generate action rule"; rtrue; } ! rule 315 if (R == NOTE_OBJECT_ACQUISITIONS_R) { print "note object acquisitions rule"; rtrue; } ! rule 316 if (R == PARSE_COMMAND_R) { print "parse command rule"; rtrue; } ! rule 317 if (R == TIMED_EVENTS_R) { print "timed events rule"; rtrue; } ! rule 318 if (R == RESURRECT_PLAYER_IF_ASKED_R) { print "resurrect player if asked rule"; rtrue; } ! rule 319 if (R == ASK_FINAL_QUESTION_R) { print "ask the final question rule"; rtrue; } ! rule 320 if (R == DetectSceneChange) { print "scene change machinery rule"; rtrue; } ! rule 321 if (R == BASIC_ACCESSIBILITY_R) { print "basic accessibility rule"; rtrue; } ! rule 322 if (R == BASIC_VISIBILITY_R) { print "basic visibility rule"; rtrue; } ! rule 323 if (R == CARRYING_REQUIREMENTS_R) { print "carrying requirements rule"; rtrue; } ! rule 324 if (R == REQUESTED_ACTIONS_REQUIRE_R) { print "requested actions require persuasion rule"; rtrue; } ! rule 325 if (R == CARRY_OUT_REQUESTED_ACTIONS_R) { print "carry out requested actions rule"; rtrue; } ! rule 326 if (R == DESCEND_TO_SPECIFIC_ACTION_R) { print "descend to specific action-processing rule"; rtrue; } ! rule 327 if (R == WORK_OUT_DETAILS_OF_SPECIFIC_R) { print "work out details of specific action rule"; rtrue; } ! rule 328 if (R == ACCESS_THROUGH_BARRIERS_R) { print "access through barriers rule"; rtrue; } ! rule 329 if (R == CANT_REACH_INSIDE_CLOSED_R) { print "can't reach inside closed containers rule"; rtrue; } ! rule 330 if (R == CANT_REACH_INSIDE_ROOMS_R) { print "can't reach inside rooms rule"; rtrue; } ! rule 331 if (R == CANT_REACH_OUTSIDE_CLOSED_R) { print "can't reach outside closed containers rule"; rtrue; } ! rule 332 if (R == LIST_WRITER_INTERNAL_R) { print "list writer internal rule"; rtrue; } ! rule 333 if (R == ACTION_PROCESSING_INTERNAL_R) { print "action processing internal rule"; rtrue; } ! rule 334 if (R == PARSER_ERROR_INTERNAL_R) { print "parser error internal rule"; rtrue; } ! rule 335 if (R == PARSER_N_ERROR_INTERNAL_R) { print "parser nothing error internal rule"; rtrue; } ! rule 336 if (R == DARKNESS_NAME_INTERNAL_R) { print "darkness name internal rule"; rtrue; } ! rule 337 if (R == PARSER_COMMAND_INTERNAL_R) { print "parser command internal rule"; rtrue; } ! rule 338 if (R == PARSER_CLARIF_INTERNAL_R) { print "parser clarification internal rule"; rtrue; } ! rule 339 if (R == YES_OR_NO_QUESTION_INTERNAL_R) { print "yes or no question internal rule"; rtrue; } ! rule 340 if (R == PRINT_PROTAGONIST_INTERNAL_R) { print "print protagonist internal rule"; rtrue; } ! rule 341 if (R == STANDARD_NAME_PRINTING_R) { print "standard name printing rule"; rtrue; } ! rule 342 if (R == STANDARD_CONTENTS_LISTING_R) { print "standard contents listing rule"; rtrue; } ! rule 343 if (R == STANDARD_IMPLICIT_TAKING_R) { print "standard implicit taking rule"; rtrue; } ! rule 344 if (R == ENABLE_GLULX_ACCEL_R) { print "enable Glulx acceleration rule"; rtrue; } ! rule 345 if (R == PRINT_OBITUARY_HEADLINE_R) { print "print obituary headline rule"; rtrue; } ! rule 346 if (R == PRINT_FINAL_SCORE_R) { print "print final score rule"; rtrue; } ! rule 347 if (R == DISPLAY_FINAL_STATUS_LINE_R) { print "display final status line rule"; rtrue; } ! rule 348 if (R == IMMEDIATELY_RESTART_VM_R) { print "immediately restart the VM rule"; rtrue; } ! rule 349 if (R == IMMEDIATELY_RESTORE_SAVED_R) { print "immediately restore saved game rule"; rtrue; } ! rule 350 if (R == IMMEDIATELY_QUIT_R) { print "immediately quit rule"; rtrue; } ! rule 351 if (R == IMMEDIATELY_UNDO_R) { print "immediately undo rule"; rtrue; } ! rule 352 if (R == READ_FINAL_ANSWER_R) { print "read the final answer rule"; rtrue; } ! rule 353 if (R == STANDARD_RESPONSE_ISSUING_R) { print "standard issuing the response text rule"; rtrue; } ! rule 354 if (R == QUIT_THE_GAME_R) { print "quit the game rule"; rtrue; } ! rule 355 if (R == SAVE_THE_GAME_R) { print "save the game rule"; rtrue; } ! rule 356 if (R == RESTORE_THE_GAME_R) { print "restore the game rule"; rtrue; } ! rule 357 if (R == RESTART_THE_GAME_R) { print "restart the game rule"; rtrue; } ! rule 358 if (R == VERIFY_THE_STORY_FILE_R) { print "verify the story file rule"; rtrue; } ! rule 359 if (R == SWITCH_TRANSCRIPT_ON_R) { print "switch the story transcript on rule"; rtrue; } ! rule 360 if (R == SWITCH_TRANSCRIPT_OFF_R) { print "switch the story transcript off rule"; rtrue; } ! rule 361 if (R == ANNOUNCE_STORY_FILE_VERSION_R) { print "announce the story file version rule"; rtrue; } ! rule 362 if (R == ANNOUNCE_SCORE_R) { print "announce the score rule"; rtrue; } ! rule 363 if (R == PREFER_ABBREVIATED_R) { print "prefer abbreviated room descriptions rule"; rtrue; } ! rule 364 if (R == REP_PREFER_ABBREVIATED_R) { print "standard report preferring abbreviated room descriptions rule"; rtrue; } ! rule 365 if (R == PREFER_UNABBREVIATED_R) { print "prefer unabbreviated room descriptions rule"; rtrue; } ! rule 366 if (R == REP_PREFER_UNABBREVIATED_R) { print "standard report preferring unabbreviated room descriptions rule"; rtrue; } ! rule 367 if (R == PREFER_SOMETIMES_ABBREVIATED_R) { print "prefer sometimes abbreviated room descriptions rule"; rtrue; } ! rule 368 if (R == REP_PREFER_SOMETIMES_ABBR_R) { print "standard report preferring sometimes abbreviated room descriptions rule"; rtrue; } ! rule 369 if (R == SWITCH_SCORE_NOTIFY_ON_R) { print "switch score notification on rule"; rtrue; } ! rule 370 if (R == REP_SWITCH_NOTIFY_ON_R) { print "standard report switching score notification on rule"; rtrue; } ! rule 371 if (R == SWITCH_SCORE_NOTIFY_OFF_R) { print "switch score notification off rule"; rtrue; } ! rule 372 if (R == REP_SWITCH_NOTIFY_OFF_R) { print "standard report switching score notification off rule"; rtrue; } ! rule 373 if (R == ANNOUNCE_PRONOUN_MEANINGS_R) { print "announce the pronoun meanings rule"; rtrue; } ! rule 374 if (R == R_16) { print "A first turn sequence rule"; rtrue; } ! rule 375 if (R == R_17) { print "A last turn sequence rule"; rtrue; } ! rule 376 if (R == R_32) { print "last specific action-processing rule"; rtrue; } ! rule 377 if (R == R_174) { print "Setting action variables for exiting"; rtrue; } ! rule 378 if (R == R_242) { print "Does the player mean taking off something worn"; rtrue; } ! rule 379 if (R == R_833) { print "Check locking it with"; rtrue; } ! rule 380 if (R == R_852) { print "When play begins"; rtrue; } ! rule 381 if (R == R_853) { print "Every turn when the player is in the Mysterious Room"; rtrue; } ! rule 382 if (R == R_854) { print "Instead of listening to the Mysterious Room"; rtrue; } ! rule 383 if (R == R_855) { print "Instead of smelling the Mysterious Room"; rtrue; } ! rule 384 if (R == R_856) { print "Instead of going south"; rtrue; } ! rule 385 if (R == R_857) { print "Instead of going east in the Mysterious Room"; rtrue; } ! rule 386 if (R == R_858) { print "Instead of going west in the Mysterious Room"; rtrue; } ! rule 387 if (R == R_859) { print "Instead of exiting in the Mysterious Room"; rtrue; } ! rule 388 if (R == R_860) { print "Instead of going up in the Mysterious Room"; rtrue; } ! rule 389 if (R == R_861) { print "Instead of going down in the Mysterious Room"; rtrue; } ! rule 390 if (R == R_862) { print "Carry out going north"; rtrue; } ! rule 391 if (R == R_863) { print "Instead of entering the door"; rtrue; } ! rule 392 if (R == R_864) { print "Instead of taking the lamp"; rtrue; } ! rule 393 if (R == R_865) { print "After unlocking the beige door with the thin key"; rtrue; } ! rule 394 if (R == R_866) { print "Instead of opening the journal"; rtrue; } ! rule 395 if (R == R_867) { print "Instead of escaping"; rtrue; } ! rule 396 if (R == R_868) { print "Instead of opening the compartment"; rtrue; } ! rule 397 if (R == R_869) { print "After unlocking the lockbox with the wide key"; rtrue; } ! rule 398 if (R == R_870) { print "Check pushing the button"; rtrue; } ! rule 399 if (R == R_871) { print "Report typing number less than 1000"; rtrue; } ! rule 400 if (R == R_872) { print "Report typing"; rtrue; } ! rule 401 if (R == R_873) { print "After typing Code"; rtrue; } ! rule 402 if (R == R_874) { print "Check switching on the left switch"; rtrue; } ! rule 403 if (R == R_875) { print "Instead of pushing the left switch"; rtrue; } ! rule 404 if (R == R_876) { print "Check switching on the right switch"; rtrue; } ! rule 405 if (R == R_877) { print "Instead of pushing the right switch"; rtrue; } ! rule 406 if (R == R_878) { print "Every turn when the player is in the Mysterious Room and SOS is 0"; rtrue; } ! rule 407 if (R == R_879) { print "After putting orange berry on the block of ice"; rtrue; } ! rule 408 if (R == R_880) { print "Instead of attacking the slide puzzle box"; rtrue; } ! rule 409 if (R == R_881) { print "Instead of attacking the block of ice"; rtrue; } ! rule 410 if (R == R_882) { print "Carry out unlocking the lockbox with the wide key"; rtrue; } ! rule 411 if (R == R_883) { print "Instead of taking the wooden box"; rtrue; } ! rule 412 if (R == R_884) { print "Check unscrewing the wooden box"; rtrue; } ! rule 413 if (R == R_885) { print "Instead of attacking the wall"; rtrue; } ! rule 414 if (R == R_886) { print "Instead of touching the wall"; rtrue; } ! rule 415 if (R == R_887) { print "When Discovery begins"; rtrue; } ! rule 416 if (R == R_888) { print "Instead of going in the Testing Area"; rtrue; } ! rule 417 if (R == R_889) { print "Instead of taking the equipment"; rtrue; } ! rule 418 if (R == R_890) { print "Instead of taking the fake room"; rtrue; } ! rule 419 if (R == R_891) { print "Instead of going north in the Testing Area"; rtrue; } ! rule 420 if (R == R_892) { print "Instead of going east in the Testing Area"; rtrue; } ! rule 421 if (R == R_893) { print "Instead of going south in the Testing Area"; rtrue; } ! rule 422 if (R == R_894) { print "Instead of going west in the Testing Area"; rtrue; } ! rule 423 if (R == R_895) { print "Instead of going up in the Testing Area"; rtrue; } ! rule 424 if (R == R_896) { print "Instead of entering the first staircase"; rtrue; } ! rule 425 if (R == R_897) { print "Instead of climbing the first staircase"; rtrue; } ! rule 426 if (R == R_898) { print "Instead of going down in the Testing Area"; rtrue; } ! rule 427 if (R == R_899) { print "Instead of going down in the Lower Landing"; rtrue; } ! rule 428 if (R == R_900) { print "Instead of entering the second staircase"; rtrue; } ! rule 429 if (R == R_901) { print "Instead of climbing the second staircase"; rtrue; } ! rule 430 if (R == R_902) { print "Instead of going up in the Lower Landing"; rtrue; } ! rule 431 if (R == R_903) { print "Instead of going down in the Upper Landing"; rtrue; } ! rule 432 if (R == R_904) { print "Carry out opening the door"; rtrue; } ! rule 433 if (R == R_905) { print "Instead of attacking the window"; rtrue; } ! rule 434 if (R == R_906) { print "Instead of taking the table"; rtrue; } ! rule 435 if (R == R_907) { print "Instead of opening the wooden door"; rtrue; } ! rule 436 if (R == R_908) { print "Instead of going south in the Observation Room"; rtrue; } ! rule 437 if (R == R_909) { print "After reading a command"; rtrue; } ! rule 438 if (R == R_910) { print "Every turn"; rtrue; } ! rule 439 if (R == R_911) { print "When play ends"; rtrue; } ! rule 440 if (R == R_912) { print "Carry out helping"; rtrue; } ! rule 441 if (R == R_913) { print "Carry out hinting for the first time"; rtrue; } ! rule 442 if (R == R_914) { print "Carry out hinting for the second time"; rtrue; } ! rule 443 if (R == R_915) { print "Carry out hinting for the third time"; rtrue; } ! rule 444 if (R == R_916) { print "Carry out hinting for the fourth time"; rtrue; } ! rule 445 if (R == R_917) { print "Carry out hinting for the fifth time"; rtrue; } ! rule 446 if (R == R_918) { print "Carry out hinting for the sixth time"; rtrue; } ! rule 447 if (R == R_919) { print "Carry out hinting for the seventh time"; rtrue; } ! rule 448 if (R == R_920) { print "After hinting more than seven times"; rtrue; } ! rule 449 print "(nameless rule at address ", R, ")"; } #ifnot; if ((R>=0) && (R 0) { ExchangeFields(i, j); f = true; break; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Sort.i6t: Insertion Sort ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ InsertionSortAlgorithm from to i j; if (to > from+1) { for (i = from+1: i < to: i++) { for (j = i: j > from: j--) { if (CompareFields(j, j-1) < 0) ExchangeFields(j, j-1); else break; } } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Sort.i6t: In-Place Mergesort ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ InPlaceMergeSortAlgorithm from to middle; if (to - from < 12) { if (to - from < 2) return; InsertionSortAlgorithm(from, to); return; } middle = (from + to)/2; InPlaceMergeSortAlgorithm(from, middle); InPlaceMergeSortAlgorithm(middle, to); IPMS_Merge(from, middle, to, middle-from, to - middle); ]; [ IPMS_Lower from to val len half mid; len = to - from; while (len > 0) { half = len/2; mid = from + half; if (CompareFields(mid, val) < 0) { from = mid + 1; len = len - half -1; } else len = half; } return from; ]; [ IPMS_Upper from to val len half mid; len = to - from; while (len > 0) { half = len/2; mid = from + half; if (CompareFields(val, mid) < 0) len = half; else { from = mid + 1; len = len - half -1; } } return from; ]; [ IPMS_Reverse from to; while (from < to) { ExchangeFields(from++, to--); } ]; [ IPMS_Rotate from mid to n val shift p1 p2; if ((from==mid) || (mid==to)) return; IPMS_Reverse(from, mid-1); IPMS_Reverse(mid, to-1); IPMS_Reverse(from, to-1); ]; [ IPMS_Merge from pivot to len1 len2 first_cut second_cut len11 len22 new_mid; if ((len1 == 0) || (len2 == 0)) return; if (len1+len2 == 2) { if (CompareFields(pivot, from) < 0) ExchangeFields(pivot, from); return; } if (len1 > len2) { len11 = len1/2; first_cut = from + len11; second_cut = IPMS_Lower(pivot, to, first_cut); len22 = second_cut - pivot; } else { len22 = len2/2; second_cut = pivot + len22; first_cut = IPMS_Upper(from, pivot, second_cut); len11 = first_cut - from; } IPMS_Rotate(first_cut, pivot, second_cut); new_mid = first_cut + len22; IPMS_Merge(from, first_cut, new_mid, len11, len22); IPMS_Merge(new_mid, second_cut, to, len1 - len11, len2 - len22); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Format ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant TB_COLUMN_REAL $8000; Constant TB_COLUMN_SIGNED $4000; Constant TB_COLUMN_TOPIC $2000; Constant TB_COLUMN_DONTSORTME $1000; Constant TB_COLUMN_NOBLANKBITS $0800; Constant TB_COLUMN_CANEXCHANGE $0400; Constant TB_COLUMN_ALLOCATED $0200; Constant TB_COLUMN_NUMBER $01ff; ! Mask to remove upper bit flags Constant COL_HSIZE 2; ! Column header size: two words (ID/flags, blank bits) ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Find Column ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableFindCol tab col f i no_cols n; no_cols = tab-->0; for (i=1: i<=no_cols: i++) if (col == ((tab-->i)-->1) & TB_COLUMN_NUMBER) return i; if (f) { RunTimeProblem(RTP_TABLE_NOCOL, tab); return 0; } return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Number of Rows ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableRows tab first_col; first_col = tab-->1; if (first_col == 0) return 0; return (first_col-->0) - COL_HSIZE; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Blanks ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant TABLE_NOVALUE = IMPROBABLE_VALUE; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Masks ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array CheckTableEntryIsBlank_LU -> $$00000001 $$00000010 $$00000100 $$00001000 $$00010000 $$00100000 $$01000000 $$10000000; Array CheckTableEntryIsNonBlank_LU -> $$11111110 $$11111101 $$11111011 $$11110111 $$11101111 $$11011111 $$10111111 $$01111111; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Testing Blankness ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CheckTableEntryIsBlank tab col row i at; if (col >= 100) col = TableFindCol(tab, col); if (col == 0) rtrue; if ((tab-->col)-->(row+COL_HSIZE) ~= TABLE_NOVALUE) { print "*** CTEIB on nonblank value ", tab, " ", col, " ", row, " ***^"; } if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) rtrue; row--; at = ((tab-->col)-->2) + (row/8); if ((TB_Blanks->at) & (CheckTableEntryIsBlank_LU->(row%8))) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Force Entry Blank ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ForceTableEntryBlank tab col row i at oldv flags; if (col >= 100) col = TableFindCol(tab, col); if (col == 0) rtrue; flags = (tab-->col)-->1; oldv = (tab-->col)-->(row+COL_HSIZE); if ((flags & TB_COLUMN_ALLOCATED) && (oldv ~= 0 or TABLE_NOVALUE)) BlkValueFree(oldv); (tab-->col)-->(row+COL_HSIZE) = TABLE_NOVALUE; if (flags & TB_COLUMN_NOBLANKBITS) return; row--; at = ((tab-->col)-->2) + (row/8); (TB_Blanks->at) = (TB_Blanks->at) | (CheckTableEntryIsBlank_LU->(row%8)); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Force Entry Non-Blank ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ForceTableEntryNonBlank tab col row i at oldv flags tc kov; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rtrue; if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) return; flags = (tab-->col)-->1; oldv = (tab-->col)-->(row+COL_HSIZE); if ((flags & TB_COLUMN_ALLOCATED) && (oldv == 0 or TABLE_NOVALUE)) { kov = UNKNOWN_TY; tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = TC_KOV(tc); if (kov ~= UNKNOWN_TY) { (tab-->col)-->(row+COL_HSIZE) = BlkValueCreate(kov); } } row--; at = ((tab-->col)-->2) + (row/8); (TB_Blanks->at) = (TB_Blanks->at) & (CheckTableEntryIsNonBlank_LU->(row%8)); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Swapping Blank Bits ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableSwapBlankBits tab row1 row2 col at1 at2 bit1 bit2; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rtrue; if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) return; row1--; at1 = ((tab-->col)-->2) + (row1/8); row2--; at2 = ((tab-->col)-->2) + (row2/8); bit1 = ((TB_Blanks->at1) & (CheckTableEntryIsBlank_LU->(row1%8))); bit2 = ((TB_Blanks->at2) & (CheckTableEntryIsBlank_LU->(row2%8))); if (bit1) bit1 = true; if (bit2) bit2 = true; if (bit1 == bit2) return; if (bit1) { (TB_Blanks->at1) = (TB_Blanks->at1) & (CheckTableEntryIsNonBlank_LU->(row1%8)); (TB_Blanks->at2) = (TB_Blanks->at2) | (CheckTableEntryIsBlank_LU->(row2%8)); } else { (TB_Blanks->at1) = (TB_Blanks->at1) | (CheckTableEntryIsBlank_LU->(row1%8)); (TB_Blanks->at2) = (TB_Blanks->at2) & (CheckTableEntryIsNonBlank_LU->(row2%8)); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Moving Blank Bits Down ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableMoveBlankBitsDown tab row1 row2 col at atp1 bit rx; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rtrue; if (((tab-->col)-->1) & TB_COLUMN_NOBLANKBITS) return; row1--; row2--; ! Read blank bit for row1: at = ((tab-->col)-->2) + (row1/8); bit = ((TB_Blanks->at) & (CheckTableEntryIsBlank_LU->(row1%8))); if (bit) bit = true; ! Loop through, setting each blank bit to the next: for (rx=row1:rxcol)-->2) + ((rx+1)/8); at = ((tab-->col)-->2) + (rx/8); if ((TB_Blanks->atp1) & (CheckTableEntryIsBlank_LU->((rx+1)%8))) { (TB_Blanks->at) = (TB_Blanks->at) | (CheckTableEntryIsBlank_LU->(rx%8)); } else { (TB_Blanks->at) = (TB_Blanks->at) & (CheckTableEntryIsNonBlank_LU->(rx%8)); } } ! Write bit to blank bit for row2: at = ((tab-->col)-->2) + (row2/8); if (bit) { (TB_Blanks->at) = (TB_Blanks->at) | (CheckTableEntryIsBlank_LU->(row2%8)); } else { (TB_Blanks->at) = (TB_Blanks->at) & (CheckTableEntryIsNonBlank_LU->(row2%8)); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Table Row Corresponding ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableRowCorr tab col lookup_value lookup_col i j f v; if (col >= 100) col=TableFindCol(tab, col, true); lookup_col = tab-->col; j = lookup_col-->0 - COL_HSIZE; if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) f=1; if (f) { for (i=1:i<=j:i++) { v = lookup_col-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; if (BlkValueCompare(v, lookup_value) == 0) return i; } } else { for (i=1:i<=j:i++) { if ((lookup_value == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; if (lookup_col-->(i+COL_HSIZE) == lookup_value) return i; } } return RunTimeProblem(RTP_TABLE_NOCORR, tab); ]; [ ExistsTableRowCorr tab col entry i k v f kov; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rfalse; f=0; if (((tab-->col)-->1) & TB_COLUMN_TOPIC) f=1; else if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) f=2; k = TableRows(tab); for (i=1:i<=k:i++) { v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; switch (f) { 1: if ((v)(entry/100, entry%100) ~= GPR_FAIL) return i; 2: if (BlkValueCompare(v, entry) == 0) return i; default: if (v == entry) return i; } } ! print "Giving up^"; return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Table Look Up Corresponding Row ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableLookUpCorr tab col1 col2 lookup_value write_flag write_value cola1 cola2 i j v f; if (col1 >= 100) col1=TableFindCol(tab, col1, true); if (col2 >= 100) col2=TableFindCol(tab, col2, true); cola1 = tab-->col1; cola2 = tab-->col2; j = cola2-->0; f=0; if (((tab-->col2)-->1) & TB_COLUMN_ALLOCATED) f=1; if (((tab-->col2)-->1) & TB_COLUMN_TOPIC) f=2; for (i=1+COL_HSIZE:i<=j:i++) { v = cola2-->i; if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col2,i-COL_HSIZE))) continue; if (f == 1) { if (BlkValueCompare(v, lookup_value) ~= 0) continue; } else if (f == 2) { if ((v)(lookup_value/100, lookup_value%100) == GPR_FAIL) continue; } else { if (v ~= lookup_value) continue; } if (write_flag) { if (write_flag == 4) ForceTableEntryBlank(tab,col1,i-COL_HSIZE); else ForceTableEntryNonBlank(tab,col1,i-COL_HSIZE); switch (write_flag) { 1: cola1-->i = write_value; 2: cola1-->i = cola1-->i + write_value; 3: cola1-->i = cola1-->i - write_value; 5: return cola1-->i; } rfalse; } v = cola1-->i; if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col1,i-COL_HSIZE))) continue; return v; } return RunTimeProblem(RTP_TABLE_NOCORR, tab); ]; [ ExistsTableLookUpCorr tab col1 col2 lookup_value cola1 cola2 i j f; if (col1 >= 100) col1=TableFindCol(tab, col1, false); if (col2 >= 100) col2=TableFindCol(tab, col2, false); if (col1*col2 == 0) rfalse; cola1 = tab-->col1; cola2 = tab-->col2; j = cola2-->0; f=0; if (((tab-->col2)-->1) & TB_COLUMN_ALLOCATED) f=1; if (((tab-->col2)-->1) & TB_COLUMN_TOPIC) f=2; for (i=1+COL_HSIZE:i<=j:i++) { if ((cola1-->i == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col1,i-COL_HSIZE))) continue; if (f == 1) { if (BlkValueCompare(cola2-->i, lookup_value) ~= 0) continue; } else if (f == 2) { if ((cola2-->i)(lookup_value/100, lookup_value%100) == GPR_FAIL) continue; } else { if (cola2-->i ~= lookup_value) continue; } rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Table Look Up Entry ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableLookUpEntry tab col index write_flag write_value v; if (tab == 0) return RunTimeProblem(RTP_TABLE_NOTABLE2); if (col >= 100) col=TableFindCol(tab, col, true); if ((index < 1) || (index > TableRows(tab))) { RunTimeProblem(RTP_TABLE_NOROW, tab, index); index = 1; } if (write_flag) { switch(write_flag) { 1: ForceTableEntryNonBlank(tab,col,index); (tab-->col)-->(index+COL_HSIZE) = write_value; 2: ForceTableEntryNonBlank(tab,col,index); (tab-->col)-->(index+COL_HSIZE) = ((tab-->col)-->(index+COL_HSIZE)) + write_value; 3: ForceTableEntryNonBlank(tab,col,index); (tab-->col)-->(index+COL_HSIZE) = ((tab-->col)-->(index+COL_HSIZE)) - write_value; 4: ForceTableEntryBlank(tab,col,index); 5: ForceTableEntryNonBlank(tab,col,index); return ((tab-->col)-->(index+COL_HSIZE)); } rfalse; } v = ((tab-->col)-->(index+COL_HSIZE)); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,index))) { RunTimeProblem(RTP_TABLE_NOENTRY, tab, col, index); rfalse; } return v; ]; [ ExistsTableLookUpEntry tab col index v; if (col >= 100) col=TableFindCol(tab, col); if (col == 0) rfalse; if ((index<1) || (index > TableRows(tab))) rfalse; v = ((tab-->col)-->(index+COL_HSIZE)); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,index))) rfalse; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Blank Rows ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableRowIsBlank tab j k; for (k=1:k<=tab-->0:k++) { if (((tab-->k)-->(j+COL_HSIZE)) ~= TABLE_NOVALUE) rfalse; if (CheckTableEntryIsBlank(tab, k, j) == false) rfalse; } rtrue; ]; [ TableBlankOutRow tab row k; if (tab==0) return RunTimeProblem(RTP_TABLE_NOTABLE); for (k=1:k<=tab-->0:k++) ForceTableEntryBlank(tab, k, row); ]; [ TableBlankOutColumn tab col n k; if (tab==0) return RunTimeProblem(RTP_TABLE_NOTABLE); n = TableRows(tab); for (k=1:k<=n:k++) ForceTableEntryBlank(tab, col, k); ]; [ TableBlankOutAll tab n k; if (tab==0) return RunTimeProblem(RTP_TABLE_NOTABLE); n = TableRows(tab); for (k=1:k<=n:k++) TableBlankOutRow(tab, k); ]; [ TableBlankRows tab i j c; i = TableRows(tab); !print i, " rows^"; for (j=1:j<=i:j++) if (TableRowIsBlank(tab, j)) c++; !print c, " blank^"; return c; ]; [ TableFilledRows tab; return TableRows(tab) - TableBlankRows(tab); ]; [ TableBlankRow tab i j; i = TableRows(tab); for (j=1:j<=i:j++) if (TableRowIsBlank(tab, j)) return j; RunTimeProblem(RTP_TABLE_NOMOREBLANKS, tab); return i; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Random Row ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableRandomRow tab i j k; i = TableRows(tab); j = TableFilledRows(tab); if (j==0) return RunTimeProblem(RTP_TABLE_NOROWS, tab); if (j>1) j = random(j); for (k=1:k<=i:k++) { if (TableRowIsBlank(tab, k) == false) j--; if (j==0) return k; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Swap Rows ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableSwapRows tab i j k l v1 v2; if (i==j) return; l = tab-->0; for (k=1:k<=l:k++) { v1 = (tab-->k)-->(i+COL_HSIZE); v2 = (tab-->k)-->(j+COL_HSIZE); (tab-->k)-->(i+COL_HSIZE) = v2; (tab-->k)-->(j+COL_HSIZE) = v1; if ((v1 == TABLE_NOVALUE) || (v2 == TABLE_NOVALUE)) TableSwapBlankBits(tab, i, j, k); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Compare Rows ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableCompareRows tab col row1 row2 dir val1 val2 bl1 bl2 f; if (col >= 100) col=TableFindCol(tab, col, false); val1 = (tab-->col)-->(row1+COL_HSIZE); val2 = (tab-->col)-->(row2+COL_HSIZE); if (val1 == TABLE_NOVALUE) bl1 = CheckTableEntryIsBlank(tab,col,row1); if (val2 == TABLE_NOVALUE) bl2 = CheckTableEntryIsBlank(tab,col,row2); if ((val1 == val2) && (bl1 == bl2)) { if (val1 ~= TABLE_NOVALUE) return 0; if (bl1 == false) return 0; ! The two entries are both blank: if (TableRowIsBlank(tab, row1)) { if (TableRowIsBlank(tab, row2)) return 0; return -1*dir; } if (TableRowIsBlank(tab, row2)) return dir; return 0; } if (bl1) return dir; if (bl2) return -1*dir; f = ((tab-->col)-->1); if (f & TB_COLUMN_ALLOCATED) { if (BlkValueCompare(val2, val1) < 0) return 1; return -1; } else if (f & TB_COLUMN_REAL) { if (REAL_NUMBER_TY_Compare(val1, val2) > 0) return 1; return -1; } else if (f & TB_COLUMN_SIGNED) { if (val1 > val2) return 1; return -1; } else { if (UnsignedCompare(val1, val2) > 0) return 1; return -1; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Move Row Down ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableMoveRowDown tab r1 r2 rx k l m v f; if (r1==r2) return; l = tab-->0; for (k=1:k<=l:k++) { f = false; m = (tab-->k)-->(r1+COL_HSIZE); if (m == TABLE_NOVALUE) f = true; for (rx=r1:rxk)-->(rx+COL_HSIZE+1); (tab-->k)-->(rx+COL_HSIZE) = v; if (v == TABLE_NOVALUE) f = true; } (tab-->k)-->(r2+COL_HSIZE) = m; if (f) TableMoveBlankBitsDown(tab, r1, r2, k); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Shuffle ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableShuffle tab i to; TableMoveBlanksToBack(tab, 1, TableRows(tab)); to = TableFilledRows(tab); for (i=2:i<=to:i++) TableSwapRows(tab, i, random(i)); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Next Row ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableNextRow tab col row dir i k val v dv min_dv min_at signed_arithmetic f blk z; if (col >= 100) col=TableFindCol(tab, col, false); f = ((tab-->col)-->1); if (f & TB_COLUMN_ALLOCATED) blk = true; signed_arithmetic = f & TB_COLUMN_SIGNED; #Iftrue (WORDSIZE == 2); if (row == 0) { if (signed_arithmetic) { if (dir == 1) val = $8000; else val = $7fff; } else { if (dir == 1) val = 0; else val = $ffff; } } else val = (tab-->col)-->(row+COL_HSIZE); if (signed_arithmetic) min_dv = $7fff; else min_dv = $ffff; #ifnot; ! WORDSIZE == 4 if (row == 0) { if (signed_arithmetic) { if (dir == 1) val = $80000000; else val = $7fffffff; } else { if (dir == 1) val = 0; else val = $ffffffff; } } else val = (tab-->col)-->(row+COL_HSIZE); if (signed_arithmetic) min_dv = $7fffffff; else min_dv = $ffffffff; #endif; k = TableRows(tab); if (dir == 1) { for (i=1:i<=k:i++) { v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; if (blk) { dv = v; if (row == 0) z = 1; else z = BlkValueCompare(v, val); f = (((z > 0) || ((z == 0) && (i > row))) && ((min_at == 0) || (BlkValueCompare(v, min_dv) < 0))); } else { dv = dir*v; if (signed_arithmetic) f = (((dv > dir*val) || ((v == val) && (i>row))) && (dv < min_dv)); else f = (((UnsignedCompare(dv, dir*val) > 0) || ((v == val) && (i>row))) && (UnsignedCompare(dv, min_dv) < 0)); } if (f) { min_dv = dv; min_at = i; } } } else { for (i=k:i>=1:i--) { v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) continue; if (blk) { dv = v; if (row == 0) z = -1; else z = BlkValueCompare(v, val); f = (((z < 0) || ((z == 0) && (i < row))) && ((min_at == 0) || (BlkValueCompare(v, min_dv) > 0))); } else { dv = dir*v; if (signed_arithmetic) f = (((dv > dir*val) || ((v == val) && (i 0) || ((v == val) && (i0) && (lnbl>0) && (fbl < lnbl)) { TableMoveRowDown(tab, fbl, lnbl); ! Move first blank just past last nonblank TableMoveBlanksToBack(tab, fbl, lnbl-1); } return torow-blc; ! Final non-blank row ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Sort ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableSort tab col dir test_flag algorithm i j k f; for (i=1:i<=tab-->0:i++) { j = tab-->i; ! Address of column table if ((j-->1) & TB_COLUMN_DONTSORTME) return RunTimeProblem(RTP_TABLE_CANTSORT, tab); } if (col >= 100) col=TableFindCol(tab, col, false); k = TableRows(tab); k = TableMoveBlanksToBack(tab, 1, k); if (test_flag) { print "After moving blanks to back:^"; TableColumnDebug(tab, col); } SetSortDomain(TableSwapRows, TableCompareRows); SortArray(tab, col, dir, k, test_flag, algorithm); if (test_flag) { print "Final state:^"; TableColumnDebug(tab, col); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Print Table Name ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintTableName T; switch(T) { TheEmptyTable: print "(the empty table)"; return; T0_final_question_options: print "Table of Final Question Options"; return; T1_locale_priorities: print "Table of Locale Priorities"; return; T2_ordinary_status: print "Table of Ordinary Status"; return; default: print "** No such table **"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Print Table to File ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TablePrint tab i j k row col v tc kov; for (i=1:i<=tab-->0:i++) { j = tab-->i; ! Address of column table if (((j-->1) & TB_COLUMN_CANEXCHANGE) == 0) rtrue; } k = TableRows(tab); k = TableMoveBlanksToBack(tab, 1, k); print "! ", (PrintTableName) tab, " (", k, ")^"; for (row=1:row<=k:row++) { for (col=1:col<=tab-->0:col++) { tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = KindAtomic(TC_KOV(tc)); if (kov == UNKNOWN_TY) kov = NUMBER_TY; v = (tab-->col)-->(row+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,row))) print "-- "; else { if (BlkValueWriteToFile(v, kov) == false) print v; print " "; } } print "^"; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Read Table from File ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifdef TARGET_GLULX; [ TableRead tab auxf row maxrow col ch v sgn dg j tc kov; for (col=1:col<=tab-->0:col++) { j = tab-->col; ! Address of column table if (((j-->1) & TB_COLUMN_CANEXCHANGE) == 0) return RunTimeProblem(RTP_TABLE_CANTSAVE, tab); } maxrow = TableRows(tab); !print maxrow, " rows available.^"; for (row=1: row<=maxrow: row++) { TableBlankOutRow(tab, row); } for (row=1: row<=maxrow: row++) { !print "Reading row ", row, "^"; ch = FileIO_GetC(auxf); if (ch == '!') { while (ch ~= -1 or 10 or 13) ch = FileIO_GetC(auxf); while (ch == 10 or 13) ch = FileIO_GetC(auxf); } for (col=1: col<=tab-->0: col++) { if (ch == -1) { row++; jump NoMore; } if (ch == 10 or 13) break; tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = KindAtomic(TC_KOV(tc)); if (kov == UNKNOWN_TY) kov = NUMBER_TY; !print "tc = ", tc, " kov = ", kov, "^"; sgn = 1; if (ch == '-') { ch = FileIO_GetC(auxf); if (ch == -1) jump NotTable; if (ch == '-') { ch = FileIO_GetC(auxf); jump EntryDone; } sgn = -1; } if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) ForceTableEntryNonBlank(tab, col, row); !print "A"; v = BlkValueReadFromFile(0, 0, -1, kov); if (v) { if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED) v = BlkValueReadFromFile(TableLookUpEntry(tab, col, row), auxf, ch, kov); else v = BlkValueReadFromFile(0, auxf, ch, kov); ch = 32; } else { dg = ch - '0'; if ((dg < 0) || (dg > 9)) jump NotTable; v = dg; for (::) { ch = FileIO_GetC(auxf); dg = ch - '0'; if ((dg < 0) || (dg > 9)) break; v = 10*v + dg; } v = v*sgn; } !print "v=", v, " "; if (((tab-->col)-->1) & TB_COLUMN_ALLOCATED == 0) TableLookUpEntry(tab, col, row, true, v); .EntryDone; !print "First nd is ", ch, "^"; while (ch == 9 or 32) ch = FileIO_GetC(auxf); } while (ch ~= -1 or 10 or 13) { if ((ch ~= '-') && (((ch-'0')<0) || ((ch-'0')>9))) jump NotTable; if (ch ~= 9 or 32) jump WontFit; ch = FileIO_GetC(auxf); } } .NoMore; while (ch == 9 or 32 or 10 or 13) ch = FileIO_GetC(auxf); if (ch == -1) return; .WontFit; return RunTimeProblem(RTP_TABLE_WONTFIT, tab); .NotTable; return RunTimeProblem(RTP_TABLE_BADFILE, tab); ]; #ENDIF; ! TARGET_GLULX ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Print Rank ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintRank i j v; #ifdef RANKING_TABLE; ANNOUNCE_SCORE_RM('B'); j = TableRows(RANKING_TABLE); for (i=j:i>=1:i--) if (score >= TableLookUpEntry(RANKING_TABLE, 1, i)) { v = TableLookUpEntry(RANKING_TABLE, 2, i); TEXT_TY_Say(v); "."; } #endif; "."; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tables.i6t: Debugging ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TableColumnDebug tab col k i v tc kov; if (col >= 100) col=TableFindCol(tab, col, false); k = TableRows(tab); tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = TC_KOV(tc); for (i=1:i<=k:i++) { if (i>1) print ", "; v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) print "--"; else { PrintKindValuePair(kov, v); } } say__p = 1; ]; [ TableRowDebug tab i col k v tc kov; k = TableRows(tab); if ((i<1) || (i>k)) "No such row"; print "(row ", i, ") |"; for (col=1: col<=tab-->0: col++) { print " "; tc = ((tab-->col)-->1) & TB_COLUMN_NUMBER; kov = TC_KOV(tc); v = (tab-->col)-->(i+COL_HSIZE); if ((v == TABLE_NOVALUE) && (CheckTableEntryIsBlank(tab,col,i))) print "-- "; else { PrintKindValuePair(kov, v); print " |"; } } say__p = 1; ]; [ TableDebug tab i k; PrintTableName(tab); print "^"; k = TableRows(tab); for (i=1:i<=k:i++) { TableRowDebug(tab, i); print "^"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: The Core Tree ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ HolderOf o; if (InitialSituation-->DONE_INIS == false) return thedark; if (o && (o.component_parent)) return o.component_parent; if (o && (parent(o))) return parent(o); return nothing; ]; [ ParentOf o; if (o) o = parent(o); return o; ]; [ CoreOf o; while (o && (o provides component_parent) && (o.component_parent)) o = o.component_parent; return o; ]; [ CoreOfParentOfCoreOf o; while (o && (o provides component_parent) && (o.component_parent)) o = o.component_parent; if (o) o = parent(o); while (o && (o provides component_parent) && (o.component_parent)) o = o.component_parent; return o; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Climbing the Core Tree ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LocationOf o; if (~~(o ofclass K1_room or K2_thing)) return nothing; if (o ofclass K4_door) { if (parent(o) == real_location) return real_location; return FrontSideOfDoor(o); } if (o ofclass K7_backdrop) { ! print "(deciding ", (the) O, " is at ", (the) BackdropLocation(o), ") "; return BackdropLocation(o); } while (o) { if (o ofclass K1_room) return o; o = CoreOfParentOfCoreOf(o); } return nothing; ]; [ CommonAncestor o1 o2 i j; o1 = CoreOf(o1); o2 = CoreOf(o2); for (i=o1: i: i = CoreOfParentOfCoreOf(i)) for (j=o2: j: j = CoreOfParentOfCoreOf(j)) if (j == i) return j; return nothing; ]; [ IndirectlyContains o1 o2; if ((o1 == nothing) || (o2 == nothing)) rfalse; if ((o1 ofclass K1_room) && (o2 ofclass K4_door)) { if (o1 == FrontSideOfDoor(o2)) rtrue; if (o1 == BackSideOfDoor(o2)) rtrue; rfalse; } if (o2 ofclass K7_backdrop) rfalse; for (o2 = HolderOf(o2) : o2 && o2 ~= thedark : o2 = HolderOf(o2)) if (o2 == o1) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: To Decide Whether In ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WhetherIn obj; if (obj has enterable) { if (IndirectlyContains(obj, player)) rtrue; rfalse; } if (obj ofclass K9_region) return TestRegionalContainment(real_location, obj); if (obj ofclass K1_room) { if (obj == real_location) rtrue; rfalse; } RunTimeProblem(RTP_NOTINAROOM, obj); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Containment Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ContainerOf A p; if (A ofclass K1_room) return A.map_region; p = parent(A); if (p == nothing) return nothing; if (p ofclass K5_container) return p; if (p ofclass K1_room) return p; if (p ofclass K9_region) return p; return nothing; ]; [ TestContainmentRange obj e f; if (obj ofclass K9_region) { objectloop (f ofclass K1_room && f.map_region == obj) if (f > e) return f; return nothing; } if (obj ofclass K5_container or K1_room) { if (e == nothing) return child(obj); return sibling(e); } return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Support Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SupporterOf obj p; p = parent(obj); if (p == nothing) return nothing; if (p ofclass K6_supporter) return p; return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Carrying Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CarrierOf obj p; p = parent(obj); if (p && (p ofclass K8_person) && (obj hasnt worn)) return p; return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Wearing Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WearerOf obj p; p = parent(obj); if (p && (p ofclass K8_person) && (obj has worn)) return p; return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Having Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ OwnerOf obj p; p = parent(obj); if (p && (p ofclass K8_person)) return p; return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Making Parts ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MakePart P Of First; if (P == player) return RunTimeProblem(RTP_CANTMAKEPART, Of); if (parent(P)) remove P; give P ~worn; if (Of == nothing) { DetachPart(P); return; } if (P.component_parent) DetachPart(P); P.component_parent = Of; First = Of.component_child; Of.component_child = P; P.component_sibling = First; ]; [ DetachPart P From Daddy O; Daddy = P.component_parent; P.component_parent = nothing; if (Daddy == nothing) { P.component_sibling = nothing; return; } if (Daddy.component_child == P) { Daddy.component_child = P.component_sibling; P.component_sibling = nothing; return; } for (O = Daddy.component_child: O: O = O.component_sibling) if (O.component_sibling == P) { O.component_sibling = P.component_sibling; P.component_sibling = nothing; return; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Movements ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MoveObject F T opt going_mode was L; if (F == nothing) return RunTimeProblem(RTP_CANTMOVENOTHING); if (F ofclass K7_backdrop) { if (T ofclass K9_region) { give F ~absent; F.found_in = T.regional_found_in; if (TestRegionalContainment(LocationOf(player), T)) move F to LocationOf(player); else remove F; return; } if (T == FoundEverywhere) { give F ~absent; F.found_in = FoundEverywhere; return; } return RunTimeProblem(RTP_BACKDROP, F, T); } if (T ofclass K9_region) return RunTimeProblem(RTP_NOTBACKDROP, F, T); if (T == FoundEverywhere) return RunTimeProblem(RTP_BACKDROPONLY, F); if (~~(F ofclass K2_thing)) return RunTimeProblem(RTP_NOTTHING, F, T); if (F has worn) { give F ~worn; if (F in T) return; } DetachPart(F); if (going_mode == false) { if (F == player) { PlayerTo(T, opt); return; } if (IndirectlyContains(F, player)) { L = LocationOf(T); if (L == nothing) return RunTimeProblem(RTP_CANTBEOFFSTAGE); if (LocationOf(player) ~= L) { was = parent(player); move player to real_location; move F to T; PlayerTo(was, true); return; } } } move F to T; ]; [ RemoveFromPlay F; if (F == nothing) return RunTimeProblem(RTP_CANTREMOVENOTHING); if (F == player) return RunTimeProblem(RTP_CANTREMOVEPLAYER); if (F ofclass K4_door) return RunTimeProblem(RTP_CANTREMOVEDOORS); if (IndirectlyContains(F, player)) return RunTimeProblem(RTP_CANTBEOFFSTAGE); give F ~worn; DetachPart(F); if (F ofclass K7_backdrop) give F absent; remove F; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: On Stage ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ OnStage O set x; if (O ofclass K1_room) rfalse; if (set < 0) { while (metaclass(O) == Object) { if (O ofclass K1_room) rtrue; if (O ofclass K9_region) rfalse; if (O ofclass K4_door) rtrue; if (O ofclass K7_backdrop) { if (O has absent) rfalse; rtrue; } x = O.component_parent; if (x) { O = x; continue; } x = parent(O); if (x) { O = x; continue; } rfalse; } } x = OnStage(O, -1); if ((x) && (set == false)) RemoveFromPlay(O); if ((x == false) && (set)) MoveObject(O, real_location); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Moving the Player ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PlayerTo newplace flag L; L = LocationOf(newplace); if (L == nothing) return RunTimeProblem(RTP_CANTBEOFFSTAGE); @push actor; actor = player; move player to newplace; location = L; real_location = location; MoveFloatingObjects(); SilentlyConsiderLight(); DivideParagraphPoint(); if (flag == 0) ; if (flag == 1) give location visited; if (flag == 2) AbbreviatedRoomDescription(); @pull actor; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Move During Going ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MoveDuringGoing F T; MoveObject(F, T, 0, true); if (actor == player) { location = LocationOf(player); real_location = location; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Being Everywhere ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FoundEverywhere; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Testing Everywhere ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BackdropEverywhere O; if (O ofclass K7_backdrop) { if (O has absent) rfalse; if (O.found_in == FoundEverywhere) rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Changing the Player ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ChangePlayer obj flag; if (~~(obj ofclass K8_person)) return RunTimeProblem(RTP_CANTCHANGE, obj); if (~~(OnStage(obj, -1))) return RunTimeProblem(RTP_CANTCHANGEOFFSTAGE, obj); if (obj.component_parent) return RunTimeProblem(RTP_CANTMAKEPART, obj); if (obj == player) return; give player ~concealed; if (player has remove_proper) give player ~proper; if (player == selfobj) { player.saved_short_name = player.short_name; player.short_name = PRINT_PROTAGONIST_INTERNAL_RM('c'); } player = obj; if (player == selfobj) { player.short_name = player.saved_short_name; } if (player hasnt proper) give player remove_proper; ! when changing out again give player concealed proper; location = LocationOf(player); real_location = location; MoveFloatingObjects(); SilentlyConsiderLight(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Floating Objects ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MoveFloatingObjects toroom i k l m address flag; if (toroom == nothing) toroom = real_location; if (toroom == nothing) return; objectloop (i) { address = i.&found_in; if (address ~= 0 && i hasnt absent) { if (ZRegion(address-->0) == 2) { m = address-->0; .TestPropositionally; if (m.call(toroom) ~= 0) move i to toroom; else { if (i in toroom) remove i; } } else { k = i.#found_in; for (l=0 : ll; if (ZRegion(m) == 2) jump TestPropositionally; if (m == toroom || m in toroom) { if (i notin toroom) move i to toroom; flag = true; } } if (flag == false) { if (i in toroom) remove i; } } if ((i ofclass K4_door) && (parent(i) == nothing)) { move i to ((i.door_to).call()); } } } ]; [ MoveBackdrop bd D x address; if (~~(bd ofclass K7_backdrop)) return RunTimeProblem(RTP_BACKDROPONLY, bd); if (bd.#found_in > WORDSIZE) { address = bd.&found_in; address-->0 = D; } else bd.found_in = D; give bd ~absent; MoveFloatingObjects(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Backdrop Location ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BackdropLocation O target address m x i k l r sl; if (O has absent) return nothing; if ((target == nothing or real_location) && (parent(O) == real_location)) return real_location; address = O.&found_in; if (address ~= 0) { k = O.#found_in; for (l=0 : ll; if (ZRegion(m) == 2) { sl = location; if (target) { location = target; r = m.call(); if (r ~= 0) { location = sl; return target; } } else { objectloop (x ofclass K1_room) { location = x; r = m.call(); if (r ~= 0) { location = sl; return x; } } } location = sl; } else { if (m ofclass K9_region) { objectloop (x ofclass K1_room) if (TestRegionalContainment(x, m)) if (target == nothing or x) return x; } else { if (target == nothing or m) return m; } } } } return nothing; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Wearing Clothes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WearObject X P opt; if (X == false) rfalse; if (X notin P) MoveObject(X, P, opt); give X worn; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Map Connections ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ MapConnection from_room dir in_direction through_door; if ((from_room ofclass K1_room) && (dir ofclass K3_direction)) { in_direction = Map_Storage--> ((from_room.IK1_Count)*No_Directions + dir.IK3_Count); if (in_direction ofclass K1_room) return in_direction; if (in_direction ofclass K4_door) { @push location; location = from_room; through_door = in_direction.door_to(); @pull location; if (through_door ofclass K1_room) return through_door; } } return nothing; ]; [ DoorFrom obj dir rv; rv = RoomOrDoorFrom(obj, dir); if (rv ofclass K4_door) return rv; return nothing; ]; [ RoomOrDoorFrom obj dir use_doors in_direction sl through_door; if ((obj ofclass K1_room) && (dir ofclass K3_direction)) { in_direction = Map_Storage--> ((obj.IK1_Count)*No_Directions + dir.IK3_Count); if (in_direction ofclass K1_room or K4_door) return in_direction; } return nothing; ]; [ AssertMapConnection r1 dir r2 in_direction; SignalMapChange(); in_direction = Map_Storage--> ((r1.IK1_Count)*No_Directions + dir.IK3_Count); if ((in_direction == 0) || (in_direction ofclass K1_room)) { Map_Storage-->((r1.IK1_Count)*No_Directions + dir.IK3_Count) = r2; return; } if (in_direction ofclass K4_door) { RunTimeProblem(RTP_EXITDOOR, r1, dir); return; } RunTimeProblem(RTP_NOEXIT, r1, dir); ]; [ AssertMapUnconnection r1 dir r2 in_direction; SignalMapChange(); in_direction = Map_Storage--> ((r1.IK1_Count)*No_Directions + dir.IK3_Count); if (r1 ofclass K4_door) { RunTimeProblem(RTP_EXITDOOR, r1, dir); return; } if (in_direction == r2) Map_Storage-->((r1.IK1_Count)*No_Directions + dir.IK3_Count) = 0; return; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Adjacency Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestAdjacency R1 R2 i row; if (R1 ofclass K9_region) RunTimeProblem(RTP_REGIONSNOTADJACENT, R1); else if (R2 ofclass K9_region) RunTimeProblem(RTP_REGIONSNOTADJACENT, R2); row = (R1.IK1_Count)*No_Directions; for (i=0: irow == R2) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Regional Containment Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestRegionalContainment obj region o; if ((obj == nothing) || (region == nothing)) rfalse; if (obj ofclass K7_backdrop or K4_door) { if (obj has absent) rfalse; objectloop (o ofclass K1_room) if (TestRegionalContainment(o, region)) if (BackdropLocation(obj, o)) rtrue; rfalse; } if (~~(obj ofclass K1_room)) obj = LocationOf(obj); if (obj == nothing) rfalse; o = obj.map_region; while (o) { if (o == region) rtrue; o = parent(o); } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Doors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FrontSideOfDoor D; if (~~(D ofclass K4_door)) rfalse; if (D provides found_in) return (D.&found_in)-->0; ! Two-sided return parent(D); ! One-sided ]; [ BackSideOfDoor D; if (~~(D ofclass K4_door)) rfalse; if (D provides found_in) return (D.&found_in)-->1; ! Two-sided return nothing; ! One-sided ]; [ OtherSideOfDoor D from_room rv; if (D ofclass K4_door) { @push location; location = LocationOf(from_room); rv = D.door_to(); @pull location; } return rv; ]; [ DirectionDoorLeadsIn D from_room rv dir; if (D ofclass K4_door) { @push location; location = LocationOf(from_room); rv = D.door_dir(); @pull location; } return rv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Visibility Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestVisibility A B; if (~~OffersLight(parent(CoreOf(A)))) rfalse; if (suppress_scope_loops) rtrue; return TestScope(B, A); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Touchability Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestTouchability A B rv; if (A ofclass K4_door or K7_backdrop) MoveFloatingObjects(LocationOf(B)); if (B ofclass K4_door or K7_backdrop) MoveFloatingObjects(LocationOf(A)); if (TestScope(B,A) == false) rv = true; else rv = ObjectIsUntouchable(B, true, A); if (A ofclass K4_door or K7_backdrop) MoveFloatingObjects(); if (rv) rfalse; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! WorldModel.i6t: Concealment Relation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TestConcealment A B; if (A ofclass K2_thing && B ofclass K2_thing) { particular_possession = B; if (CarryOutActivity(DECIDING_CONCEALED_POSSESS_ACT, A)) rtrue; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Parsing Tokens ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Cond_Token_12 ; if ((((~~((player == selfobj)))))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_13 ; if ((((~~((player == selfobj)))))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_14 ; if ((((~~((player == selfobj)))))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Cond_Token_15 ; if ((((~~((player == selfobj)))))) return GPR_PREPOSITION; return GPR_FAIL; ]; [ Mistake_Token_184 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 284; return GPR_PREPOSITION; ]; [ Mistake_Token_185 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 285; return GPR_PREPOSITION; ]; [ Mistake_Token_186 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 286; return GPR_PREPOSITION; ]; [ Mistake_Token_187 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 287; return GPR_PREPOSITION; ]; [ Mistake_Token_188 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 288; return GPR_PREPOSITION; ]; [ Mistake_Token_189 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 289; return GPR_PREPOSITION; ]; [ Mistake_Token_182 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 282; return GPR_PREPOSITION; ]; [ Mistake_Token_183 ; if (actor ~= player) return GPR_FAIL; understand_as_mistake_number = 283; return GPR_PREPOSITION; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Number.i6t: Understanding ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DECIMAL_TOKEN wnc wna r n wa wl sign base digit digit_count original_wn group_wn; wnc = wn; original_wn = wn; group_wn = wn; wn = wnc; r = ParseTokenStopped(ELEMENTARY_TT, NUMBER_TOKEN); if ((r == GPR_NUMBER) && (parsed_number ~= 10000)) return r; wn = wnc; wa = WordAddress(wn); wl = WordLength(wn); sign = 1; base = 10; digit_count = 0; if (wa->0 ~= '-' or '$' or '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9') return GPR_FAIL; if (wa->0 == '-') { sign = -1; wl--; wa++; } if (wl == 0) return GPR_FAIL; n = 0; while (wl > 0) { if (wa->0 >= 'a') digit = wa->0 - 'a' + 10; else digit = wa->0 - '0'; digit_count++; switch (base) { 2: if (digit_count == 17) return GPR_FAIL; 10: #Iftrue (WORDSIZE == 2); if (digit_count == 6) return GPR_FAIL; if (digit_count == 5) { if (n > 3276) return GPR_FAIL; if (n == 3276) { if (sign == 1 && digit > 7) return GPR_FAIL; if (sign == -1 && digit > 8) return GPR_FAIL; } } #Ifnot; ! i.e., if (WORDSIZE == 4) if (digit_count == 11) return GPR_FAIL; if (digit_count == 10) { if (n > 214748364) return GPR_FAIL; if (n == 214748364) { if (sign == 1 && digit > 7) return GPR_FAIL; if (sign == -1 && digit > 8) return GPR_FAIL; } } #Endif; 16: if (digit_count == 5) return GPR_FAIL; } if (digit >= 0 && digit < base) n = base*n + digit; else return GPR_FAIL; wl--; wa++; } parsed_number = n*sign; wn++; return GPR_NUMBER; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Number.i6t: Truth states ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TRUTH_STATE_TOKEN original_wn wd; original_wn = wn; wn = original_wn; wd = NextWordStopped(); if (wd == 'true') { parsed_number = 1; return GPR_NUMBER; } if (wd == 'false') { parsed_number = 0; return GPR_NUMBER; } wn = original_wn; return GPR_FAIL; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Number.i6t: Absolute value ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NUMBER_TY_Abs x; if (x<0) return -x; return x; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RealNumber.i6t: Printing reals ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Ifdef TARGET_GLULX; [ REAL_NUMBER_TY_Say fp; print (Float) fp; ]; [ REAL_NUMBER_TY_Compare r1 r2; @jflt r1 r2 ?less; @jfeq r1 r2 0 ?same; return 1; .same; return 0; .less; return -1; ]; [ NUMBER_TY_to_REAL_NUMBER_TY int real; @numtof int real; return real; ]; [ REAL_NUMBER_TY_to_NUMBER_TY real int; @ftonumn real int; return int; ]; [ REAL_NUMBER_TY_Sin in out; @sin in out; return out; ]; [ REAL_NUMBER_TY_Cos in out; @cos in out; return out; ]; [ REAL_NUMBER_TY_Tan in out; @tan in out; return out; ]; [ REAL_NUMBER_TY_Arcsin in out; @asin in out; return out; ]; [ REAL_NUMBER_TY_Arccos in out; @acos in out; return out; ]; [ REAL_NUMBER_TY_Arctan in out; @atan in out; return out; ]; [ REAL_NUMBER_TY_Sinh in tmp out; @exp in tmp; @fsub M_0 in in; @exp in out; @fadd tmp out out; @fmul out M_HALF out; return out; ]; [ REAL_NUMBER_TY_Cosh in tmp out; @exp in tmp; @fsub M_0 in in; @exp in out; @fsub tmp out out; @fmul out M_HALF out; return out; ]; [ REAL_NUMBER_TY_Tanh in tmp out; tmp = REAL_NUMBER_TY_Sinh(in); in = REAL_NUMBER_TY_Cosh(in); @fdiv tmp in out; return out; ]; [ REAL_NUMBER_TY_Reciprocal in out; @fdiv M_1 in out; return out; ]; [ REAL_NUMBER_TY_Negate in out; @fsub M_0 in out; return out; ]; [ REAL_NUMBER_TY_Plus x y out; @fadd x y out; return out; ]; [ REAL_NUMBER_TY_Minus x y out; @fsub x y out; return out; ]; [ REAL_NUMBER_TY_Times x y out; @fmul x y out; return out; ]; [ REAL_NUMBER_TY_Divide x y out; @fdiv x y out; return out; ]; [ REAL_NUMBER_TY_Remainder x y r q; @fmod x y r q; return r; ]; [ REAL_NUMBER_TY_Approximate x y quotient out; @fdiv x y quotient; @fadd quotient M_HALF quotient; @floor quotient quotient; @fmul quotient y out; return out; ]; [ REAL_NUMBER_TY_Root x out; @sqrt x out; return out; ]; [ REAL_NUMBER_TY_Cube_Root x out; @pow x M_THIRD out; return out; ]; [ REAL_NUMBER_TY_Pow x y out; @pow x y out; return out; ]; [ REAL_NUMBER_TY_Exp x out; @exp x out; return out; ]; [ REAL_NUMBER_TY_Log x out; @log x out; return out; ]; [ REAL_NUMBER_TY_BLog x n d out; @log x out; if (n == 10) d = M_LOG10; else { @numtof n d; @log d d; } @fdiv out d out; return out; ]; [ REAL_NUMBER_TY_Floor x out; @floor x out; return out; ]; [ REAL_NUMBER_TY_Ceiling x out; @ceil x out; return out; ]; [ REAL_NUMBER_TY_Abs x; return x & $7fffffff; ]; [ REAL_NUMBER_TY_Nan x; @jisnan x ?Nan; rfalse; .Nan; rtrue; ]; Constant M_0 = $0; Constant M_1 = $3F800000; Constant M_HALF = $3F000000; ! 1/3 Constant M_THIRD = $3EAAAAAB; ! 1/3 Constant M_LOG10 = $40135D8E; ! log(10) Constant M_N1 = $BF800000; ! -1 Constant M_PI = $40490FDB; Constant M_NPI = $C0490FDB; Constant M_2PI = $40C90FDB; ! 2*pi Constant M_PI2 = $3FC90FDB; ! pi/2 Constant M_NPI2 = $BFC90FDB; Constant M_E = $402DF854; Constant M_E2 = $40EC7326; ! e^2 Constant M_N0 = $80000000; ! negative zero Constant M_INF = $7F800000; ! infinity Constant M_NINF = $FF800000; ! negative infinity Constant M_NAN = $7F800001; ! one of many NaN values Constant M_NNAN = $FF800001; ! another, with a sign bit ! Floating-point parsing routines. ! Parse a float from a text buffer. Returns a float value, or FLOAT_NAN if ! no value was understood. ! ! The recognized format, if you'll pardon a slightly bastardized regexp ! syntax, is "S?D*(PD*)?(ES?D+)?" where S is a sign character "+" or "-", ! D is a decimal digit "0" to "9", P is a decimal point ".", ! and E is the exponential modifier "E" or "e". ! ! For flexibility, the string "M10^" is also accepted for E, where M is ! "X", "x", "*", or the multiplication sign @{D7}. Optional spaces are ! allowed before and after the M sign. (But only for the "10^" form of ! the exponent, not the "e" form.) ! ! This routine does not try to recognize special names for infinity or NaN, ! but it can return FLOAT_INFINITY or FLOAT_NINFINITY if the exponent is too ! large. ! ! This routine relies on floating-point math. Therefore, the same string ! may parse to slightly different float values on different interpreters! ! Be warned. ! ! If useall is true, this insists on using all len characters from the buffer. ! (It returns FLOAT_NAN if any unrecognized characters are left over.) ! Contrariwise, if useall is false, unused characters at the end of the buffer ! are fine. (But not at the beginning; the float must start at the beginning ! of the buffer.) ! [ FloatParse buf len useall res ix val ch ten negative intpart fracpart fracdiv expon expnegative count; ! print "FloatParse <"; ! for (ix=0: ixix; ! print ">^"; if (len == 0) return FLOAT_NAN; ix = 0; negative = false; intpart = 0; fracpart = 0; @numtof 10 ten; ! Sign character (optional) ch = buf->ix; if (ch == '-') { negative = true; ix++; } else if (ch == '+') { ix++; } ! Some digits (optional) for (count=0 : ixix; if (ch < '0' || ch > '9') break; val = (ch - '0'); @numtof val val; @fmul intpart ten intpart; @fadd intpart val intpart; } ! Decimal point and more digits (optional) if (ixix == '.') { ix++; @numtof 1 fracdiv; for ( : ixix; if (ch < '0' || ch > '9') break; val = (ch - '0'); @numtof val val; @fmul fracpart ten fracpart; @fadd fracpart val fracpart; @fmul fracdiv ten fracdiv; } @fdiv fracpart fracdiv fracpart; } ! If there are no digits before *or* after the decimal point, fail. if (count == 0) return FLOAT_NAN; ! Combine the integer and fractional parts. @fadd intpart fracpart res; ! Exponent (optional) if (ixix == 'e' or 'E' or ' ' or '*' or 'x' or 'X' or $D7) { if (buf->ix == 'e' or 'E') { ! no spaces, just the 'e' ix++; if (ix == len) return FLOAT_NAN; } else { ! any number of spaces, "*", any number of spaces more, "10^" while (ix < len && buf->ix == ' ') ix++; if (ix == len) return FLOAT_NAN; if (buf->ix ~= '*' or 'x' or 'X' or $D7) return FLOAT_NAN; ix++; while (ix < len && buf->ix == ' ') ix++; if (ix == len) return FLOAT_NAN; if (buf->ix ~= '1') return FLOAT_NAN; ix++; if (buf->ix ~= '0') return FLOAT_NAN; ix++; if (buf->ix ~= $5E) return FLOAT_NAN; ix++; } ! Sign character (optional) expnegative = false; ch = buf->ix; if (ch == '-') { expnegative = true; ix++; } else if (ch == '+') { ix++; } expon = 0; ! Some digits (mandatory) for (count=0 : ixix; if (ch < '0' || ch > '9') break; expon = 10*expon + (ch - '0'); } if (count == 0) return FLOAT_NAN; if (expnegative) expon = -expon; if (expon) { @numtof expon expon; @pow ten expon val; @fmul res val res; } } if (negative) { ! set the value's sign bit res = $80000000 | res; } if (useall && ix ~= len) return FLOAT_NAN; return res; ]; ! An I6 grammar routine (GPR) for floats. On success, this returns ! GPR_NUMBER and stores a value in the global parsed_number. ! ! This is quite a nuisance, actually, because "." is a word separator. ! Also, we want to accept command sequences like "type 4. look"! So we ! need to collect a set of words made up of digits, signs, periods, and ! the letter "e", but without any intervening whitespace, and excluding ! a trailing period. ! ! (This will fail to correctly parse "type 4.e", but I think that is a ! small flaw. A player would more likely try "type 4. e" or, really, ! not concatenate commands at all. It will also parse "type 4. on keyboard" ! as two commands, even though "4." is a legitimate float literal. ! Contrariwise, "type 4. x me" will be taken as one command. (Because the "x" ! *could* be a continuation of the float, and I don't back up when it turns ! out not to be.) I don't plan to worry about these cases.) [ FLOAT_TOKEN buf bufend ix ch firstwd newstart newlen lastchar lastwasdot; if (wn > num_words) return GPR_FAIL; ! We're going to collect a set of words. Start with zero words. firstwd = wn; buf = WordAddress(wn); bufend = buf; lastchar = 0; while (wn <= num_words) { newstart = WordAddress(wn); if (newstart ~= bufend) { ! There's whitespace between the previous word and this one. ! Whitespace is okay around an asterisk... if ((lastchar ~= '*' or 'x' or 'X' or $D7) && (newstart->0 ~= '*' or 'x' or 'X' or $D7)) { ! But around any other character, it's not. ! Don't include the new word. break; } } newlen = WordLength(wn); for (ix=0 : ixix; if (~~((ch >= '0' && ch <= '9') || (ch == '-' or '+' or 'E' or 'e' or '.' or 'x' or 'X' or '*' or $D7 or $5E))) break; } if (ix < newlen) { ! This word contains an invalid character. ! Don't include the new word. break; } ! Okay, include it. bufend = newstart + newlen; wn++; lastchar = (bufend-1)->0; lastwasdot = (newlen == 1 && lastchar == '.'); } if (wn > firstwd && lastwasdot) { ! Exclude a trailing period. wn--; bufend--; } if (wn == firstwd) { ! No words accepted. return GPR_FAIL; } parsed_number = FloatParse(buf, bufend-buf, true); if (parsed_number == FLOAT_NAN) return GPR_FAIL; return GPR_NUMBER; ]; ! Floating-point printing routines. (These are based on code in ! Glulxercise.inf, but modified.) ! Print a float. This uses exponential notation ("[-]N.NNNe[+-]NN") if ! the exponent is not between 6 and -4. If it is (that is, if the ! absolute value is near 1.0) then it uses decimal notation ("[-]NNN.NNNNN"). ! The precision is the number of digits after the decimal point ! (at least one, no more than eight). The default is five, because ! beyond that rounding errors creep in, and even exactly-represented ! float values are printed with trailing fudgy digits. ! Trailing zeroes are trimmed. [ Float val prec pval; pval = val & $7FFFFFFF; @jz pval ?UseFloatDec; @jfge pval $49742400 ?UseFloatExp; ! 1000000.0 @jflt pval $38D1B717 ?UseFloatExp; ! 0.0001 .UseFloatDec; return FloatDec(val, prec); .UseFloatExp; return FloatExp(val, prec); ]; Array PowersOfTen --> 1 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000; ! Print a float in exponential notation: "[-]N.NNNe[+-]NN". ! The precision is the number of digits after the decimal point ! (at least one, no more than eight). The default is five, because ! beyond that rounding errors creep in, and even exactly-represented ! float values are printed with trailing fudgy digits. ! Trailing zeroes are trimmed. [ FloatExp val prec log10val expo fexpo idig ix pow10; if (prec == 0) prec = 5; if (prec > 8) prec = 8; pow10 = PowersOfTen --> prec; ! Knock off the sign bit first. if (val & $80000000) { @streamchar '-'; val = val & $7FFFFFFF; } @jisnan val ?IsNan; @jisinf val ?IsInf; if (val == $0) { expo = 0; idig = 0; jump DoPrint; } ! Take as an example val=123.5, with precision=6. The desired ! result is "1.23000e+02". @log val sp; @fdiv sp $40135D8E log10val; ! $40135D8E is log(10) @floor log10val fexpo; @ftonumn fexpo expo; ! expo is now the exponent (as an integer). For our example, expo=2. @fsub log10val fexpo sp; @numtof prec sp; @fadd sp sp sp; @fmul sp $40135D8E sp; @exp sp sp; ! The stack value is now exp((log10val - fexpo + prec) * log(10)). ! We've shifted the decimal point left by expo digits (so that ! it's after the first nonzero digit), and then right by prec ! digits. In our example, that would be 1235000.0. @ftonumn sp idig; ! Round to an integer, and we have 1235000. Notice that this is ! exactly the digits we want to print (if we stick a decimal point ! after the first). .DoPrint; if (idig >= 10*pow10) { ! Rounding errors have left us outside the decimal range of ! [1.0, 10.0) where we should be. Adjust to the next higher ! exponent. expo++; @div idig 10 idig; } ! Trim off trailing zeroes, as long as there's at least one digit ! after the decimal point. (Delete this stanza if you want to ! keep the trailing zeroes.) while (prec > 1) { @mod idig 10 sp; @jnz sp ?DoneTrimming; @div pow10 10 pow10; @div idig 10 idig; prec--; } .DoneTrimming; for (ix=0 : ix<=prec : ix++) { @div idig pow10 sp; @mod sp 10 sp; @streamnum sp; if (ix == 0) @streamchar '.'; @div pow10 10 pow10; } ! Print the exponent. There are two conventions coded here: the ! programmatic ("1.0e+00") and the literary ("1.0 x 10^0"). #ifndef FLOAT_PROGRAMMING_EXPONENTS; PrintMultiplicationSign(); @streamstr "10"; @streamchar $5E; @streamnum expo; #ifnot; ! Convention is to use at least two digits. @streamchar 'e'; if (expo < 0) { @streamchar '-'; @neg expo expo; } else { @streamchar '+'; } if (expo < 10) @streamchar '0'; @streamnum expo; #endif; ! FLOAT_PROGRAMMING_EXPONENTS rtrue; .IsNan; PrintNan(); rtrue; .IsInf; PrintInfinity(); rtrue; ]; ! Print a float in decimal notation: "[-]NNN.NNNNN". ! The precision is the number of digits after the decimal point ! (at least one, no more than eight). The default is five, because ! beyond that rounding errors creep in, and even exactly-represented ! float values are printed with trailing fudgy digits. ! Trailing zeroes are trimmed. [ FloatDec val prec log10val int fint extra0 frac idig ix pow10; if (prec == 0) prec = 5; if (prec > 8) prec = 8; pow10 = PowersOfTen --> prec; ! Knock off the sign bit first. if (val & $80000000) { @streamchar '-'; val = val & $7FFFFFFF; } @jisnan val ?IsNan; @jisinf val ?IsInf; ! Take as an example val=123.5, with precision=6. The desired result ! is "123.50000". extra0 = 0; @fmod val $3F800000 frac fint; ! $3F800000 is 1.0. @ftonumz fint int; ! This converts the integer part of the value to an integer value; ! in our example, 123. if (int == $7FFFFFFF) { ! Looks like the integer part of the value is bigger than ! we can store in an int variable. (It could be as large ! as 3e+38.) We're going to have to use a log function to ! reduce it by some number of factors of 10, and then pad ! with zeroes. @log fint sp; @fdiv sp $40135D8E log10val; ! $40135D8E is log(10) @ftonumz log10val extra0; @sub extra0 8 extra0; ! extra0 is the number of zeroes we'll be padding with. @numtof extra0 sp; @fsub log10val sp sp; @fmul sp $40135D8E sp; @exp sp sp; ! The stack value is now exp((log10val - extra0) * log(10)). ! We've shifted the decimal point far enough left to leave ! about eight digits, which is all we can print as an integer. @ftonumz sp int; } ! Print the integer part. @streamnum int; for (ix=0 : ix= pow10) { ! Rounding errors have left us outside the decimal range of ! [0.0, 1.0) where we should be. I'm not sure this is possible, ! actually, but we'll just adjust downward. idig = pow10 - 1; } ! Trim off trailing zeroes, as long as there's at least one digit ! after the decimal point. (Delete this stanza if you want to ! keep the trailing zeroes.) while (prec > 1) { @mod idig 10 sp; @jnz sp ?DoneTrimming; @div pow10 10 pow10; @div idig 10 idig; prec--; } .DoneTrimming; @div pow10 10 pow10; for (ix=0 : ix= 0) return ((t1+t2/2)/t2)*t2; return -((-t1+t2/2)/t2)*t2; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Conversion To Number ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ NUMBER_TY_to_TIME_TY n; n = n%1440; if (n < 0) return n + 1440; return n; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Square Root ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SquareRoot num op res one n x; if (num < 0) { RunTimeProblem(RTP_NEGATIVEROOT); return 1; } ! Use floating-point ops if available. #ifdef TARGET_GLULX; @gestalt 11 0 n; if (n) { @numtof num x; @sqrt x x; @ftonumz x num; return num; } #endif; op = num; if (num < 0) { RunTimeProblem(RTP_NEGATIVEROOT); return 1; } ! "one" starts at the highest power of four <= the argument. for (one = WORD_NEXTTOHIGHBIT: one > op: one = one/4) ; while (one ~= 0) { ! print "Round: op = ", op, " res = ", res, ", res**2 = ", res*res, " one = ", one, " nthb = ", WORD_NEXTTOHIGHBIT, "^"; if (op >= res + one) { op = op - res - one; res = res/2 + one; } else { res = res/2; } one = one/4; } ! print "Res is ", res, "^"; return res; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Cube Root ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CubeRoot num neg x y n; ! Use floating-point ops if available. #ifdef TARGET_GLULX; @gestalt 11 0 n; if (n) { if (num < 0) { neg = true; num = -num; } @numtof num x; @pow x 1051372203 x; ! pow(x, 0.3333) @ftonumz x num; if (neg) return -num; else return num; } #endif; if (num < 0) x = -SquareRoot(-num); else x = SquareRoot(num); for (n=0: (y ~= x) && (n++ < 100): y = x, x = (2*x + num/x/x)/3) ; return x; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Digital Printing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintTimeOfDay t h aop; if (t<0) { print ""; return; } if (t >= TWELVE_HOURS) { aop = "pm"; t = t - TWELVE_HOURS; } else aop = "am"; h = t/ONE_HOUR; if (h==0) h=12; print h, ":"; if (t%ONE_HOUR < 10) print "0"; print t%ONE_HOUR, " ", (string) aop; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Analogue Printing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PrintTimeOfDayEnglish t h m dir aop; h = (t/ONE_HOUR) % 12; m = t%ONE_HOUR; if (h==0) h=12; if (m==0) { print (number) h, " o'clock"; return; } dir = "past"; if (m > HALF_HOUR) { m = ONE_HOUR-m; h = (h+1)%12; if (h==0) h=12; dir = "to"; } switch(m) { QUARTER_HOUR: print "quarter"; HALF_HOUR: print "half"; default: print (number) m; if (m%5 ~= 0) { if (m == 1) print " minute"; else print " minutes"; } } print " ", (string) dir, " ", (number) h; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Understanding ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TIME_TOKEN first_word second_word at length flag illegal_char offhour hr mn i original_wn; original_wn = wn; wn = original_wn; first_word = NextWordStopped(); switch (first_word) { 'midnight': parsed_number = 0; return GPR_NUMBER; 'midday', 'noon': parsed_number = TWELVE_HOURS; return GPR_NUMBER; } ! Next try the format 12:02 at = WordAddress(wn-1); length = WordLength(wn-1); for (i=0: ii) { ':': if (flag == false && i>0 && i 5 || illegal_char) flag = false; if (flag) { for (i=0: at->i~=':': i++, hr=hr*10) hr = hr + at->i - '0'; hr = hr/10; for (i++: ii - '0'; mn = mn/10; second_word = NextWordStopped(); parsed_number = HoursMinsWordToTime(hr, mn, second_word); if (parsed_number == -1) return GPR_FAIL; if (second_word ~= 'pm' or 'am') wn--; return GPR_NUMBER; } ! Lastly the wordy format offhour = -1; if (first_word == 'half') offhour = HALF_HOUR; if (first_word == 'quarter') offhour = QUARTER_HOUR; if (offhour < 0) offhour = TryNumber(wn-1); if (offhour < 0 || offhour >= ONE_HOUR) return GPR_FAIL; second_word = NextWordStopped(); switch (second_word) { ! "six o'clock", "six" 'o^clock', 'am', 'pm', -1: hr = offhour; if (hr > 12) return GPR_FAIL; ! "quarter to six", "twenty past midnight" 'to', 'past': mn = offhour; hr = TryNumber(wn); if (hr <= 0) { switch (NextWordStopped()) { 'noon', 'midday': hr = 12; 'midnight': hr = 0; default: return GPR_FAIL; } } if (hr >= 13) return GPR_FAIL; if (second_word == 'to') { mn = ONE_HOUR-mn; hr--; if (hr<0) hr=23; } wn++; second_word = NextWordStopped(); ! "six thirty" default: hr = offhour; mn = TryNumber(--wn); if (mn < 0 || mn >= ONE_HOUR) return GPR_FAIL; wn++; second_word = NextWordStopped(); } parsed_number = HoursMinsWordToTime(hr, mn, second_word); if (parsed_number < 0) return GPR_FAIL; if (second_word ~= 'pm' or 'am' or 'o^clock') wn--; return GPR_NUMBER; ]; [ HoursMinsWordToTime hour minute word x; if (hour >= 24) return -1; if (minute >= ONE_HOUR) return -1; x = hour*ONE_HOUR + minute; if (hour >= 13) return x; x = x % TWELVE_HOURS; if (word == 'pm') x = x + TWELVE_HOURS; if (word ~= 'am' or 'pm' && hour == 12) x = x + TWELVE_HOURS; return x; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Relative Time Token ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RELATIVE_TIME_TOKEN first_word second_word offhour mult mn original_wn; original_wn = wn; wn = original_wn; first_word = NextWordStopped(); wn--; if (first_word == 'an' or 'a//') mn=1; else mn=TryNumber(wn); if (mn == -1000) { first_word = NextWordStopped(); if (first_word == 'half') offhour = HALF_HOUR; if (first_word == 'quarter') offhour = QUARTER_HOUR; if (offhour > 0) { second_word = NextWordStopped(); if (second_word == 'of') second_word = NextWordStopped(); if (second_word == 'an') second_word = NextWordStopped(); if (second_word == 'hour') { parsed_number = offhour; return GPR_NUMBER; } } return GPR_FAIL; } wn++; first_word = NextWordStopped(); switch (first_word) { 'minutes', 'minute': mult = 1; 'hours', 'hour': mult = 60; default: return GPR_FAIL; } parsed_number = mn*mult; if (mult == 60) { mn=TryNumber(wn); if (mn ~= -1000) { wn++; first_word = NextWordStopped(); if (first_word == 'minutes' or 'minute') parsed_number = parsed_number + mn; else wn = wn - 2; } } return GPR_NUMBER; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: During Scene Matching ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ DuringSceneMatching prop sc; for (sc=0: scsc == 1) && (prop(sc+1))) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Time.i6t: Scene Questions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SceneUtility sc task; if (sc <= 0) return 0; if (task == 1 or 2) { if (scene_endings-->(sc-1) == 0) return RunTimeProblem(RTP_SCENEHASNTSTARTED, sc); } else { if (scene_endings-->(sc-1) <= 1) return RunTimeProblem(RTP_SCENEHASNTENDED, sc); } switch (task) { 1: return (the_time - scene_started-->(sc-1))%(TWENTY_FOUR_HOURS); 2: return scene_started-->(sc-1); 3: return (the_time - scene_ended-->(sc-1))%(TWENTY_FOUR_HOURS); 4: return scene_ended-->(sc-1); } ]; [ Kind_GPR_11 original_wn ! internal use only group_wn ! internal use only v ! internal use only w ! internal use only rv ! internal use only ; original_wn = wn; return GPR_FAIL; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Text generation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant CV_POS = -1; Constant CV_NEG = -2; Constant CV_MODAL = -3; Constant CV_MEANING = -4; [ ConjugateVerb_0 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "be"; 2: print "been"; 3: print "being"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "am"; 2: print "are"; 3: print "is"; 4: print "are"; 5: print "are"; 6: print "are"; } 2: switch (vp) { 1: print "was"; 2: print "were"; 3: print "was"; 4: print "were"; 5: print "were"; 6: print "were"; } 3: if (vp == 3) { print "has been"; } else { print "have been"; } 4: print "had been"; 5: print "will be"; } CV_NEG: switch (t) { 1: switch (vp) { 1: print "am not"; 2: print "are not"; 3: print "is not"; 4: print "are not"; 5: print "are not"; 6: print "are not"; } 2: switch (vp) { 1: print "was not"; 2: print "were not"; 3: print "was not"; 4: print "were not"; 5: print "were not"; 6: print "were not"; } 3: if (vp == 3) { print "has not been"; } else { print "have not been"; } 4: print "had not been"; 5: print "will not be"; } } ]; [ ConjugateVerb_1 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "auxiliary-have"; 2: print "had"; 3: print "having"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "has"; } else { print "have"; } 2: print "had"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "has not"; } else { print "have not"; } 2: print "had not"; } } ]; [ ConjugateVerb_2 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "have"; 2: print "had"; 3: print "having"; CV_MODAL: return false; CV_MEANING: return Rel_Record_27; CV_POS: switch (t) { 1: if (vp == 3) { print "has"; } else { print "have"; } 2: print "had"; 3: if (vp == 3) { print "has had"; } else { print "have had"; } 4: print "had had"; 5: print "will have"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not have"; } else { print "do not have"; } 2: print "did not have"; 3: if (vp == 3) { print "has not had"; } else { print "have not had"; } 4: print "had not had"; 5: print "will not have"; } } ]; [ ConjugateVerb_3 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "do"; 2: print "done"; 3: print "doing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "does"; } else { print "do"; } 2: print "did"; 3: if (vp == 3) { print "has done"; } else { print "have done"; } 4: print "had done"; 5: print "will do"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not"; } else { print "do not"; } 2: print "did not"; 3: if (vp == 3) { print "has not done"; } else { print "have not done"; } 4: print "had not done"; 5: print "will not do"; } } ]; [ ConjugateVerb_4 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "relate"; 2: print "related"; 3: print "relating"; CV_MODAL: return false; CV_MEANING: return Rel_Record_3; CV_POS: switch (t) { 1: if (vp == 3) { print "relates"; } else { print "relate"; } 2: print "related"; 3: if (vp == 3) { print "has related"; } else { print "have related"; } 4: print "had related"; 5: print "will relate"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not relate"; } else { print "do not relate"; } 2: print "did not relate"; 3: if (vp == 3) { print "has not related"; } else { print "have not related"; } 4: print "had not related"; 5: print "will not relate"; } } ]; [ ConjugateVerb_5 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "mean"; 2: print "meant"; 3: print "meaning"; CV_MODAL: return false; CV_MEANING: return Rel_Record_5; CV_POS: switch (t) { 1: if (vp == 3) { print "means"; } else { print "mean"; } 2: print "meant"; 3: if (vp == 3) { print "has meant"; } else { print "have meant"; } 4: print "had meant"; 5: print "will mean"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not mean"; } else { print "do not mean"; } 2: print "did not mean"; 3: if (vp == 3) { print "has not meant"; } else { print "have not meant"; } 4: print "had not meant"; 5: print "will not mean"; } } ]; [ ConjugateVerb_6 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "provide"; 2: print "provided"; 3: print "providing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_1; CV_POS: switch (t) { 1: if (vp == 3) { print "provides"; } else { print "provide"; } 2: print "provided"; 3: if (vp == 3) { print "has provided"; } else { print "have provided"; } 4: print "had provided"; 5: print "will provide"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not provide"; } else { print "do not provide"; } 2: print "did not provide"; 3: if (vp == 3) { print "has not provided"; } else { print "have not provided"; } 4: print "had not provided"; 5: print "will not provide"; } } ]; [ ConjugateVerb_7 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "contain"; 2: print "contained"; 3: print "containing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_15; CV_POS: switch (t) { 1: if (vp == 3) { print "contains"; } else { print "contain"; } 2: print "contained"; 3: if (vp == 3) { print "has contained"; } else { print "have contained"; } 4: print "had contained"; 5: print "will contain"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not contain"; } else { print "do not contain"; } 2: print "did not contain"; 3: if (vp == 3) { print "has not contained"; } else { print "have not contained"; } 4: print "had not contained"; 5: print "will not contain"; } } ]; [ ConjugateVerb_8 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "support"; 2: print "supported"; 3: print "supporting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_17; CV_POS: switch (t) { 1: if (vp == 3) { print "supports"; } else { print "support"; } 2: print "supported"; 3: if (vp == 3) { print "has supported"; } else { print "have supported"; } 4: print "had supported"; 5: print "will support"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not support"; } else { print "do not support"; } 2: print "did not support"; 3: if (vp == 3) { print "has not supported"; } else { print "have not supported"; } 4: print "had not supported"; 5: print "will not support"; } } ]; [ ConjugateVerb_9 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "incorporate"; 2: print "incorporated"; 3: print "incorporating"; CV_MODAL: return false; CV_MEANING: return Rel_Record_19; CV_POS: switch (t) { 1: if (vp == 3) { print "incorporates"; } else { print "incorporate"; } 2: print "incorporated"; 3: if (vp == 3) { print "has incorporated"; } else { print "have incorporated"; } 4: print "had incorporated"; 5: print "will incorporate"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not incorporate"; } else { print "do not incorporate"; } 2: print "did not incorporate"; 3: if (vp == 3) { print "has not incorporated"; } else { print "have not incorporated"; } 4: print "had not incorporated"; 5: print "will not incorporate"; } } ]; [ ConjugateVerb_10 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "enclose"; 2: print "enclosed"; 3: print "enclosing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_37; CV_POS: switch (t) { 1: if (vp == 3) { print "encloses"; } else { print "enclose"; } 2: print "enclosed"; 3: if (vp == 3) { print "has enclosed"; } else { print "have enclosed"; } 4: print "had enclosed"; 5: print "will enclose"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not enclose"; } else { print "do not enclose"; } 2: print "did not enclose"; 3: if (vp == 3) { print "has not enclosed"; } else { print "have not enclosed"; } 4: print "had not enclosed"; 5: print "will not enclose"; } } ]; [ ConjugateVerb_11 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "carry"; 2: print "carried"; 3: print "carrying"; CV_MODAL: return false; CV_MEANING: return Rel_Record_21; CV_POS: switch (t) { 1: if (vp == 3) { print "carries"; } else { print "carry"; } 2: print "carried"; 3: if (vp == 3) { print "has carried"; } else { print "have carried"; } 4: print "had carried"; 5: print "will carry"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not carry"; } else { print "do not carry"; } 2: print "did not carry"; 3: if (vp == 3) { print "has not carried"; } else { print "have not carried"; } 4: print "had not carried"; 5: print "will not carry"; } } ]; [ ConjugateVerb_12 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "hold"; 2: print "held"; 3: print "holding"; CV_MODAL: return false; CV_MEANING: return Rel_Record_23; CV_POS: switch (t) { 1: if (vp == 3) { print "holds"; } else { print "hold"; } 2: print "held"; 3: if (vp == 3) { print "has held"; } else { print "have held"; } 4: print "had held"; 5: print "will hold"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not hold"; } else { print "do not hold"; } 2: print "did not hold"; 3: if (vp == 3) { print "has not held"; } else { print "have not held"; } 4: print "had not held"; 5: print "will not hold"; } } ]; [ ConjugateVerb_13 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "wear"; 2: print "worn"; 3: print "wearing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_25; CV_POS: switch (t) { 1: if (vp == 3) { print "wears"; } else { print "wear"; } 2: print "wore"; 3: if (vp == 3) { print "has worn"; } else { print "have worn"; } 4: print "had worn"; 5: print "will wear"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not wear"; } else { print "do not wear"; } 2: print "did not wear"; 3: if (vp == 3) { print "has not worn"; } else { print "have not worn"; } 4: print "had not worn"; 5: print "will not wear"; } } ]; [ ConjugateVerb_14 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "be able to see"; 2: print "been able to see"; 3: print "being able to see"; CV_MODAL: return false; CV_MEANING: return Rel_Record_31; CV_POS: switch (t) { 1: print "can see"; 2: print "could see"; 3: if (vp == 3) { print "has been able to see"; } else { print "have been able to see"; } 4: print "had been able to see"; 5: print "will be able to see"; 6: print "see"; 7: print "see"; } CV_NEG: switch (t) { 1: print "cannot see"; 2: print "could not see"; 3: if (vp == 3) { print "has not been able to see"; } else { print "have not been able to see"; } 4: print "had not been able to see"; 5: print "will not be able to see"; 6: print "see"; 7: print "see"; } } ]; [ ConjugateVerb_15 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "be able to"; 2: print "been able to"; 3: print "being able to"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "can"; if (modal_to) { print " "; modal_to(1); } 2: print "can"; if (modal_to) { print " "; modal_to(1); } 3: print "can"; if (modal_to) { print " "; modal_to(1); } 4: print "can"; if (modal_to) { print " "; modal_to(1); } 5: print "can"; if (modal_to) { print " "; modal_to(1); } 6: print "can"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "could"; if (modal_to) { print " "; modal_to(1); } 2: print "could"; if (modal_to) { print " "; modal_to(1); } 3: print "could"; if (modal_to) { print " "; modal_to(1); } 4: print "could"; if (modal_to) { print " "; modal_to(1); } 5: print "could"; if (modal_to) { print " "; modal_to(1); } 6: print "could"; if (modal_to) { print " "; modal_to(1); } } 3: switch (vp) { 1: print "have been able to"; if (modal_to) { print " "; modal_to(1); } 2: print "have been able to"; if (modal_to) { print " "; modal_to(1); } 3: print "has been able to"; if (modal_to) { print " "; modal_to(1); } 4: print "have been able to"; if (modal_to) { print " "; modal_to(1); } 5: print "have been able to"; if (modal_to) { print " "; modal_to(1); } 6: print "have been able to"; if (modal_to) { print " "; modal_to(1); } } 4: switch (vp) { 1: print "had been able to"; if (modal_to) { print " "; modal_to(1); } 2: print "had been able to"; if (modal_to) { print " "; modal_to(1); } 3: print "had been able to"; if (modal_to) { print " "; modal_to(1); } 4: print "had been able to"; if (modal_to) { print " "; modal_to(1); } 5: print "had been able to"; if (modal_to) { print " "; modal_to(1); } 6: print "had been able to"; if (modal_to) { print " "; modal_to(1); } } 5: switch (vp) { 1: print "will be able to"; if (modal_to) { print " "; modal_to(1); } 2: print "will be able to"; if (modal_to) { print " "; modal_to(1); } 3: print "will be able to"; if (modal_to) { print " "; modal_to(1); } 4: print "will be able to"; if (modal_to) { print " "; modal_to(1); } 5: print "will be able to"; if (modal_to) { print " "; modal_to(1); } 6: print "will be able to"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { 1: switch (vp) { 1: print "cannot"; if (modal_to) { print " "; modal_to(1); } 2: print "cannot"; if (modal_to) { print " "; modal_to(1); } 3: print "cannot"; if (modal_to) { print " "; modal_to(1); } 4: print "cannot"; if (modal_to) { print " "; modal_to(1); } 5: print "cannot"; if (modal_to) { print " "; modal_to(1); } 6: print "cannot"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "could not"; if (modal_to) { print " "; modal_to(1); } 2: print "could not"; if (modal_to) { print " "; modal_to(1); } 3: print "could not"; if (modal_to) { print " "; modal_to(1); } 4: print "could not"; if (modal_to) { print " "; modal_to(1); } 5: print "could not"; if (modal_to) { print " "; modal_to(1); } 6: print "could not"; if (modal_to) { print " "; modal_to(1); } } 3: switch (vp) { 1: print "have not been able to"; if (modal_to) { print " "; modal_to(1); } 2: print "have not been able to"; if (modal_to) { print " "; modal_to(1); } 3: print "has not been able to"; if (modal_to) { print " "; modal_to(1); } 4: print "have not been able to"; if (modal_to) { print " "; modal_to(1); } 5: print "have not been able to"; if (modal_to) { print " "; modal_to(1); } 6: print "have not been able to"; if (modal_to) { print " "; modal_to(1); } } 4: switch (vp) { 1: print "had not been able to"; if (modal_to) { print " "; modal_to(1); } 2: print "had not been able to"; if (modal_to) { print " "; modal_to(1); } 3: print "had not been able to"; if (modal_to) { print " "; modal_to(1); } 4: print "had not been able to"; if (modal_to) { print " "; modal_to(1); } 5: print "had not been able to"; if (modal_to) { print " "; modal_to(1); } 6: print "had not been able to"; if (modal_to) { print " "; modal_to(1); } } 5: switch (vp) { 1: print "will not be able to"; if (modal_to) { print " "; modal_to(1); } 2: print "will not be able to"; if (modal_to) { print " "; modal_to(1); } 3: print "will not be able to"; if (modal_to) { print " "; modal_to(1); } 4: print "will not be able to"; if (modal_to) { print " "; modal_to(1); } 5: print "will not be able to"; if (modal_to) { print " "; modal_to(1); } 6: print "will not be able to"; if (modal_to) { print " "; modal_to(1); } } } } ]; [ ConjugateVerb_16 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "see"; 2: print "seen"; 3: print "seeing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "sees"; } else { print "see"; } 2: print "saw"; 3: if (vp == 3) { print "has seen"; } else { print "have seen"; } 4: print "had seen"; 5: print "will see"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not see"; } else { print "do not see"; } 2: print "did not see"; 3: if (vp == 3) { print "has not seen"; } else { print "have not seen"; } 4: print "had not seen"; 5: print "will not see"; } } ]; [ ConjugateVerb_17 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "be able to touch"; 2: print "been able to touch"; 3: print "being able to touch"; CV_MODAL: return false; CV_MEANING: return Rel_Record_33; CV_POS: switch (t) { 1: print "can touch"; 2: print "could touch"; 3: if (vp == 3) { print "has been able to touch"; } else { print "have been able to touch"; } 4: print "had been able to touch"; 5: print "will be able to touch"; 6: print "touch"; 7: print "touch"; } CV_NEG: switch (t) { 1: print "cannot touch"; 2: print "could not touch"; 3: if (vp == 3) { print "has not been able to touch"; } else { print "have not been able to touch"; } 4: print "had not been able to touch"; 5: print "will not be able to touch"; 6: print "touch"; 7: print "touch"; } } ]; [ ConjugateVerb_18 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "touch"; 2: print "touched"; 3: print "touching"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "touches"; } else { print "touch"; } 2: print "touched"; 3: if (vp == 3) { print "has touched"; } else { print "have touched"; } 4: print "had touched"; 5: print "will touch"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not touch"; } else { print "do not touch"; } 2: print "did not touch"; 3: if (vp == 3) { print "has not touched"; } else { print "have not touched"; } 4: print "had not touched"; 5: print "will not touch"; } } ]; [ ConjugateVerb_19 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "conceal"; 2: print "concealed"; 3: print "concealing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_35; CV_POS: switch (t) { 1: if (vp == 3) { print "conceals"; } else { print "conceal"; } 2: print "concealed"; 3: if (vp == 3) { print "has concealed"; } else { print "have concealed"; } 4: print "had concealed"; 5: print "will conceal"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not conceal"; } else { print "do not conceal"; } 2: print "did not conceal"; 3: if (vp == 3) { print "has not concealed"; } else { print "have not concealed"; } 4: print "had not concealed"; 5: print "will not conceal"; } } ]; [ ConjugateVerb_20 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "unlock"; 2: print "unlocked"; 3: print "unlocking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_69; CV_POS: switch (t) { 1: if (vp == 3) { print "unlocks"; } else { print "unlock"; } 2: print "unlocked"; 3: if (vp == 3) { print "has unlocked"; } else { print "have unlocked"; } 4: print "had unlocked"; 5: print "will unlock"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not unlock"; } else { print "do not unlock"; } 2: print "did not unlock"; 3: if (vp == 3) { print "has not unlocked"; } else { print "have not unlocked"; } 4: print "had not unlocked"; 5: print "will not unlock"; } } ]; [ ConjugateVerb_21 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "achieve"; 2: print "achieved"; 3: print "achieving"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "achieves"; } else { print "achieve"; } 2: print "achieved"; 3: if (vp == 3) { print "has achieved"; } else { print "have achieved"; } 4: print "had achieved"; 5: print "will achieve"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not achieve"; } else { print "do not achieve"; } 2: print "did not achieve"; 3: if (vp == 3) { print "has not achieved"; } else { print "have not achieved"; } 4: print "had not achieved"; 5: print "will not achieve"; } } ]; [ ConjugateVerb_22 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "appreciate"; 2: print "appreciated"; 3: print "appreciating"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "appreciates"; } else { print "appreciate"; } 2: print "appreciated"; 3: if (vp == 3) { print "has appreciated"; } else { print "have appreciated"; } 4: print "had appreciated"; 5: print "will appreciate"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not appreciate"; } else { print "do not appreciate"; } 2: print "did not appreciate"; 3: if (vp == 3) { print "has not appreciated"; } else { print "have not appreciated"; } 4: print "had not appreciated"; 5: print "will not appreciate"; } } ]; [ ConjugateVerb_23 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "arrive"; 2: print "arrived"; 3: print "arriving"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "arrives"; } else { print "arrive"; } 2: print "arrived"; 3: if (vp == 3) { print "has arrived"; } else { print "have arrived"; } 4: print "had arrived"; 5: print "will arrive"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not arrive"; } else { print "do not arrive"; } 2: print "did not arrive"; 3: if (vp == 3) { print "has not arrived"; } else { print "have not arrived"; } 4: print "had not arrived"; 5: print "will not arrive"; } } ]; [ ConjugateVerb_24 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "care"; 2: print "cared"; 3: print "caring"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "cares"; } else { print "care"; } 2: print "cared"; 3: if (vp == 3) { print "has cared"; } else { print "have cared"; } 4: print "had cared"; 5: print "will care"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not care"; } else { print "do not care"; } 2: print "did not care"; 3: if (vp == 3) { print "has not cared"; } else { print "have not cared"; } 4: print "had not cared"; 5: print "will not care"; } } ]; [ ConjugateVerb_25 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "close"; 2: print "closed"; 3: print "closing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "closes"; } else { print "close"; } 2: print "closed"; 3: if (vp == 3) { print "has closed"; } else { print "have closed"; } 4: print "had closed"; 5: print "will close"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not close"; } else { print "do not close"; } 2: print "did not close"; 3: if (vp == 3) { print "has not closed"; } else { print "have not closed"; } 4: print "had not closed"; 5: print "will not close"; } } ]; [ ConjugateVerb_26 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "die"; 2: print "died"; 3: print "dying"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "dies"; } else { print "die"; } 2: print "died"; 3: if (vp == 3) { print "has died"; } else { print "have died"; } 4: print "had died"; 5: print "will die"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not die"; } else { print "do not die"; } 2: print "did not die"; 3: if (vp == 3) { print "has not died"; } else { print "have not died"; } 4: print "had not died"; 5: print "will not die"; } } ]; [ ConjugateVerb_27 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "discover"; 2: print "discovered"; 3: print "discovering"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "discovers"; } else { print "discover"; } 2: print "discovered"; 3: if (vp == 3) { print "has discovered"; } else { print "have discovered"; } 4: print "had discovered"; 5: print "will discover"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not discover"; } else { print "do not discover"; } 2: print "did not discover"; 3: if (vp == 3) { print "has not discovered"; } else { print "have not discovered"; } 4: print "had not discovered"; 5: print "will not discover"; } } ]; [ ConjugateVerb_28 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "drop"; 2: print "dropped"; 3: print "dropping"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "drops"; } else { print "drop"; } 2: print "dropped"; 3: if (vp == 3) { print "has dropped"; } else { print "have dropped"; } 4: print "had dropped"; 5: print "will drop"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not drop"; } else { print "do not drop"; } 2: print "did not drop"; 3: if (vp == 3) { print "has not dropped"; } else { print "have not dropped"; } 4: print "had not dropped"; 5: print "will not drop"; } } ]; [ ConjugateVerb_29 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "eat"; 2: print "eaten"; 3: print "eating"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "eats"; } else { print "eat"; } 2: print "ate"; 3: if (vp == 3) { print "has eaten"; } else { print "have eaten"; } 4: print "had eaten"; 5: print "will eat"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not eat"; } else { print "do not eat"; } 2: print "did not eat"; 3: if (vp == 3) { print "has not eaten"; } else { print "have not eaten"; } 4: print "had not eaten"; 5: print "will not eat"; } } ]; [ ConjugateVerb_30 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "feel"; 2: print "felt"; 3: print "feeling"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "feels"; } else { print "feel"; } 2: print "felt"; 3: if (vp == 3) { print "has felt"; } else { print "have felt"; } 4: print "had felt"; 5: print "will feel"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not feel"; } else { print "do not feel"; } 2: print "did not feel"; 3: if (vp == 3) { print "has not felt"; } else { print "have not felt"; } 4: print "had not felt"; 5: print "will not feel"; } } ]; [ ConjugateVerb_31 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "find"; 2: print "found"; 3: print "finding"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "finds"; } else { print "find"; } 2: print "found"; 3: if (vp == 3) { print "has found"; } else { print "have found"; } 4: print "had found"; 5: print "will find"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not find"; } else { print "do not find"; } 2: print "did not find"; 3: if (vp == 3) { print "has not found"; } else { print "have not found"; } 4: print "had not found"; 5: print "will not find"; } } ]; [ ConjugateVerb_32 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "get"; 2: print "got"; 3: print "getting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "gets"; } else { print "get"; } 2: print "got"; 3: if (vp == 3) { print "has got"; } else { print "have got"; } 4: print "had got"; 5: print "will get"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not get"; } else { print "do not get"; } 2: print "did not get"; 3: if (vp == 3) { print "has not got"; } else { print "have not got"; } 4: print "had not got"; 5: print "will not get"; } } ]; [ ConjugateVerb_33 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "give"; 2: print "given"; 3: print "giving"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "gives"; } else { print "give"; } 2: print "gave"; 3: if (vp == 3) { print "has given"; } else { print "have given"; } 4: print "had given"; 5: print "will give"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not give"; } else { print "do not give"; } 2: print "did not give"; 3: if (vp == 3) { print "has not given"; } else { print "have not given"; } 4: print "had not given"; 5: print "will not give"; } } ]; [ ConjugateVerb_34 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "go"; 2: print "gone"; 3: print "going"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "goes"; } else { print "go"; } 2: print "went"; 3: if (vp == 3) { print "has gone"; } else { print "have gone"; } 4: print "had gone"; 5: print "will go"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not go"; } else { print "do not go"; } 2: print "did not go"; 3: if (vp == 3) { print "has not gone"; } else { print "have not gone"; } 4: print "had not gone"; 5: print "will not go"; } } ]; [ ConjugateVerb_35 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "happen"; 2: print "happened"; 3: print "happening"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "happens"; } else { print "happen"; } 2: print "happened"; 3: if (vp == 3) { print "has happened"; } else { print "have happened"; } 4: print "had happened"; 5: print "will happen"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not happen"; } else { print "do not happen"; } 2: print "did not happen"; 3: if (vp == 3) { print "has not happened"; } else { print "have not happened"; } 4: print "had not happened"; 5: print "will not happen"; } } ]; [ ConjugateVerb_36 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "hear"; 2: print "heard"; 3: print "hearing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "hears"; } else { print "hear"; } 2: print "heard"; 3: if (vp == 3) { print "has heard"; } else { print "have heard"; } 4: print "had heard"; 5: print "will hear"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not hear"; } else { print "do not hear"; } 2: print "did not hear"; 3: if (vp == 3) { print "has not heard"; } else { print "have not heard"; } 4: print "had not heard"; 5: print "will not hear"; } } ]; [ ConjugateVerb_37 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "jump"; 2: print "jumped"; 3: print "jumping"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "jumps"; } else { print "jump"; } 2: print "jumped"; 3: if (vp == 3) { print "has jumped"; } else { print "have jumped"; } 4: print "had jumped"; 5: print "will jump"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not jump"; } else { print "do not jump"; } 2: print "did not jump"; 3: if (vp == 3) { print "has not jumped"; } else { print "have not jumped"; } 4: print "had not jumped"; 5: print "will not jump"; } } ]; [ ConjugateVerb_38 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "lack"; 2: print "lacked"; 3: print "lacking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "lacks"; } else { print "lack"; } 2: print "lacked"; 3: if (vp == 3) { print "has lacked"; } else { print "have lacked"; } 4: print "had lacked"; 5: print "will lack"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not lack"; } else { print "do not lack"; } 2: print "did not lack"; 3: if (vp == 3) { print "has not lacked"; } else { print "have not lacked"; } 4: print "had not lacked"; 5: print "will not lack"; } } ]; [ ConjugateVerb_39 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "lead"; 2: print "led"; 3: print "leading"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "leads"; } else { print "lead"; } 2: print "led"; 3: if (vp == 3) { print "has led"; } else { print "have led"; } 4: print "had led"; 5: print "will lead"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not lead"; } else { print "do not lead"; } 2: print "did not lead"; 3: if (vp == 3) { print "has not led"; } else { print "have not led"; } 4: print "had not led"; 5: print "will not lead"; } } ]; [ ConjugateVerb_40 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "like"; 2: print "liked"; 3: print "liking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "likes"; } else { print "like"; } 2: print "liked"; 3: if (vp == 3) { print "has liked"; } else { print "have liked"; } 4: print "had liked"; 5: print "will like"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not like"; } else { print "do not like"; } 2: print "did not like"; 3: if (vp == 3) { print "has not liked"; } else { print "have not liked"; } 4: print "had not liked"; 5: print "will not like"; } } ]; [ ConjugateVerb_41 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "listen"; 2: print "listened"; 3: print "listening"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "listens"; } else { print "listen"; } 2: print "listened"; 3: if (vp == 3) { print "has listened"; } else { print "have listened"; } 4: print "had listened"; 5: print "will listen"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not listen"; } else { print "do not listen"; } 2: print "did not listen"; 3: if (vp == 3) { print "has not listened"; } else { print "have not listened"; } 4: print "had not listened"; 5: print "will not listen"; } } ]; [ ConjugateVerb_42 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "lock"; 2: print "locked"; 3: print "locking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "locks"; } else { print "lock"; } 2: print "locked"; 3: if (vp == 3) { print "has locked"; } else { print "have locked"; } 4: print "had locked"; 5: print "will lock"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not lock"; } else { print "do not lock"; } 2: print "did not lock"; 3: if (vp == 3) { print "has not locked"; } else { print "have not locked"; } 4: print "had not locked"; 5: print "will not lock"; } } ]; [ ConjugateVerb_43 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "look"; 2: print "looked"; 3: print "looking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "looks"; } else { print "look"; } 2: print "looked"; 3: if (vp == 3) { print "has looked"; } else { print "have looked"; } 4: print "had looked"; 5: print "will look"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not look"; } else { print "do not look"; } 2: print "did not look"; 3: if (vp == 3) { print "has not looked"; } else { print "have not looked"; } 4: print "had not looked"; 5: print "will not look"; } } ]; [ ConjugateVerb_44 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "need"; 2: print "needed"; 3: print "needing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "needs"; } else { print "need"; } 2: print "needed"; 3: if (vp == 3) { print "has needed"; } else { print "have needed"; } 4: print "had needed"; 5: print "will need"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not need"; } else { print "do not need"; } 2: print "did not need"; 3: if (vp == 3) { print "has not needed"; } else { print "have not needed"; } 4: print "had not needed"; 5: print "will not need"; } } ]; [ ConjugateVerb_45 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "open"; 2: print "opened"; 3: print "opening"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "opens"; } else { print "open"; } 2: print "opened"; 3: if (vp == 3) { print "has opened"; } else { print "have opened"; } 4: print "had opened"; 5: print "will open"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not open"; } else { print "do not open"; } 2: print "did not open"; 3: if (vp == 3) { print "has not opened"; } else { print "have not opened"; } 4: print "had not opened"; 5: print "will not open"; } } ]; [ ConjugateVerb_46 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "pass"; 2: print "passed"; 3: print "passing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "passes"; } else { print "pass"; } 2: print "passed"; 3: if (vp == 3) { print "has passed"; } else { print "have passed"; } 4: print "had passed"; 5: print "will pass"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not pass"; } else { print "do not pass"; } 2: print "did not pass"; 3: if (vp == 3) { print "has not passed"; } else { print "have not passed"; } 4: print "had not passed"; 5: print "will not pass"; } } ]; [ ConjugateVerb_47 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "pick"; 2: print "picked"; 3: print "picking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "picks"; } else { print "pick"; } 2: print "picked"; 3: if (vp == 3) { print "has picked"; } else { print "have picked"; } 4: print "had picked"; 5: print "will pick"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not pick"; } else { print "do not pick"; } 2: print "did not pick"; 3: if (vp == 3) { print "has not picked"; } else { print "have not picked"; } 4: print "had not picked"; 5: print "will not pick"; } } ]; [ ConjugateVerb_48 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "provoke"; 2: print "provoked"; 3: print "provoking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "provokes"; } else { print "provoke"; } 2: print "provoked"; 3: if (vp == 3) { print "has provoked"; } else { print "have provoked"; } 4: print "had provoked"; 5: print "will provoke"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not provoke"; } else { print "do not provoke"; } 2: print "did not provoke"; 3: if (vp == 3) { print "has not provoked"; } else { print "have not provoked"; } 4: print "had not provoked"; 5: print "will not provoke"; } } ]; [ ConjugateVerb_49 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "pull"; 2: print "pulled"; 3: print "pulling"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "pulls"; } else { print "pull"; } 2: print "pulled"; 3: if (vp == 3) { print "has pulled"; } else { print "have pulled"; } 4: print "had pulled"; 5: print "will pull"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not pull"; } else { print "do not pull"; } 2: print "did not pull"; 3: if (vp == 3) { print "has not pulled"; } else { print "have not pulled"; } 4: print "had not pulled"; 5: print "will not pull"; } } ]; [ ConjugateVerb_50 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "push"; 2: print "pushed"; 3: print "pushing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "pushes"; } else { print "push"; } 2: print "pushed"; 3: if (vp == 3) { print "has pushed"; } else { print "have pushed"; } 4: print "had pushed"; 5: print "will push"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not push"; } else { print "do not push"; } 2: print "did not push"; 3: if (vp == 3) { print "has not pushed"; } else { print "have not pushed"; } 4: print "had not pushed"; 5: print "will not push"; } } ]; [ ConjugateVerb_51 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "put"; 2: print "put"; 3: print "putting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "puts"; } else { print "put"; } 2: print "put"; 3: if (vp == 3) { print "has put"; } else { print "have put"; } 4: print "had put"; 5: print "will put"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not put"; } else { print "do not put"; } 2: print "did not put"; 3: if (vp == 3) { print "has not put"; } else { print "have not put"; } 4: print "had not put"; 5: print "will not put"; } } ]; [ ConjugateVerb_52 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "rub"; 2: print "rubbed"; 3: print "rubbing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "rubs"; } else { print "rub"; } 2: print "rubbed"; 3: if (vp == 3) { print "has rubbed"; } else { print "have rubbed"; } 4: print "had rubbed"; 5: print "will rub"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not rub"; } else { print "do not rub"; } 2: print "did not rub"; 3: if (vp == 3) { print "has not rubbed"; } else { print "have not rubbed"; } 4: print "had not rubbed"; 5: print "will not rub"; } } ]; [ ConjugateVerb_53 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "say"; 2: print "said"; 3: print "saying"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "says"; } else { print "say"; } 2: print "said"; 3: if (vp == 3) { print "has said"; } else { print "have said"; } 4: print "had said"; 5: print "will say"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not say"; } else { print "do not say"; } 2: print "did not say"; 3: if (vp == 3) { print "has not said"; } else { print "have not said"; } 4: print "had not said"; 5: print "will not say"; } } ]; [ ConjugateVerb_54 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "search"; 2: print "searched"; 3: print "searching"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "searches"; } else { print "search"; } 2: print "searched"; 3: if (vp == 3) { print "has searched"; } else { print "have searched"; } 4: print "had searched"; 5: print "will search"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not search"; } else { print "do not search"; } 2: print "did not search"; 3: if (vp == 3) { print "has not searched"; } else { print "have not searched"; } 4: print "had not searched"; 5: print "will not search"; } } ]; [ ConjugateVerb_55 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "seem"; 2: print "seemed"; 3: print "seeming"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "seems"; } else { print "seem"; } 2: print "seemed"; 3: if (vp == 3) { print "has seemed"; } else { print "have seemed"; } 4: print "had seemed"; 5: print "will seem"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not seem"; } else { print "do not seem"; } 2: print "did not seem"; 3: if (vp == 3) { print "has not seemed"; } else { print "have not seemed"; } 4: print "had not seemed"; 5: print "will not seem"; } } ]; [ ConjugateVerb_56 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "set"; 2: print "set"; 3: print "setting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "sets"; } else { print "set"; } 2: print "set"; 3: if (vp == 3) { print "has set"; } else { print "have set"; } 4: print "had set"; 5: print "will set"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not set"; } else { print "do not set"; } 2: print "did not set"; 3: if (vp == 3) { print "has not set"; } else { print "have not set"; } 4: print "had not set"; 5: print "will not set"; } } ]; [ ConjugateVerb_57 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "smell"; 2: print "smelled"; 3: print "smelling"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "smells"; } else { print "smell"; } 2: print "smelled"; 3: if (vp == 3) { print "has smelled"; } else { print "have smelled"; } 4: print "had smelled"; 5: print "will smell"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not smell"; } else { print "do not smell"; } 2: print "did not smell"; 3: if (vp == 3) { print "has not smelled"; } else { print "have not smelled"; } 4: print "had not smelled"; 5: print "will not smell"; } } ]; [ ConjugateVerb_58 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "sniff"; 2: print "sniffed"; 3: print "sniffing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "sniffs"; } else { print "sniff"; } 2: print "sniffed"; 3: if (vp == 3) { print "has sniffed"; } else { print "have sniffed"; } 4: print "had sniffed"; 5: print "will sniff"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not sniff"; } else { print "do not sniff"; } 2: print "did not sniff"; 3: if (vp == 3) { print "has not sniffed"; } else { print "have not sniffed"; } 4: print "had not sniffed"; 5: print "will not sniff"; } } ]; [ ConjugateVerb_59 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "squeeze"; 2: print "squeezed"; 3: print "squeezing"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "squeezes"; } else { print "squeeze"; } 2: print "squeezed"; 3: if (vp == 3) { print "has squeezed"; } else { print "have squeezed"; } 4: print "had squeezed"; 5: print "will squeeze"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not squeeze"; } else { print "do not squeeze"; } 2: print "did not squeeze"; 3: if (vp == 3) { print "has not squeezed"; } else { print "have not squeezed"; } 4: print "had not squeezed"; 5: print "will not squeeze"; } } ]; [ ConjugateVerb_60 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "switch"; 2: print "switched"; 3: print "switching"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "switches"; } else { print "switch"; } 2: print "switched"; 3: if (vp == 3) { print "has switched"; } else { print "have switched"; } 4: print "had switched"; 5: print "will switch"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not switch"; } else { print "do not switch"; } 2: print "did not switch"; 3: if (vp == 3) { print "has not switched"; } else { print "have not switched"; } 4: print "had not switched"; 5: print "will not switch"; } } ]; [ ConjugateVerb_61 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "take"; 2: print "taken"; 3: print "taking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "takes"; } else { print "take"; } 2: print "took"; 3: if (vp == 3) { print "has taken"; } else { print "have taken"; } 4: print "had taken"; 5: print "will take"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not take"; } else { print "do not take"; } 2: print "did not take"; 3: if (vp == 3) { print "has not taken"; } else { print "have not taken"; } 4: print "had not taken"; 5: print "will not take"; } } ]; [ ConjugateVerb_62 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "talk"; 2: print "talked"; 3: print "talking"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "talks"; } else { print "talk"; } 2: print "talked"; 3: if (vp == 3) { print "has talked"; } else { print "have talked"; } 4: print "had talked"; 5: print "will talk"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not talk"; } else { print "do not talk"; } 2: print "did not talk"; 3: if (vp == 3) { print "has not talked"; } else { print "have not talked"; } 4: print "had not talked"; 5: print "will not talk"; } } ]; [ ConjugateVerb_63 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "taste"; 2: print "tasted"; 3: print "tasting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "tastes"; } else { print "taste"; } 2: print "tasted"; 3: if (vp == 3) { print "has tasted"; } else { print "have tasted"; } 4: print "had tasted"; 5: print "will taste"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not taste"; } else { print "do not taste"; } 2: print "did not taste"; 3: if (vp == 3) { print "has not tasted"; } else { print "have not tasted"; } 4: print "had not tasted"; 5: print "will not taste"; } } ]; [ ConjugateVerb_64 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "turn"; 2: print "turned"; 3: print "turning"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "turns"; } else { print "turn"; } 2: print "turned"; 3: if (vp == 3) { print "has turned"; } else { print "have turned"; } 4: print "had turned"; 5: print "will turn"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not turn"; } else { print "do not turn"; } 2: print "did not turn"; 3: if (vp == 3) { print "has not turned"; } else { print "have not turned"; } 4: print "had not turned"; 5: print "will not turn"; } } ]; [ ConjugateVerb_65 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "wait"; 2: print "waited"; 3: print "waiting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "waits"; } else { print "wait"; } 2: print "waited"; 3: if (vp == 3) { print "has waited"; } else { print "have waited"; } 4: print "had waited"; 5: print "will wait"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not wait"; } else { print "do not wait"; } 2: print "did not wait"; 3: if (vp == 3) { print "has not waited"; } else { print "have not waited"; } 4: print "had not waited"; 5: print "will not wait"; } } ]; [ ConjugateVerb_66 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "wave"; 2: print "waved"; 3: print "waving"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "waves"; } else { print "wave"; } 2: print "waved"; 3: if (vp == 3) { print "has waved"; } else { print "have waved"; } 4: print "had waved"; 5: print "will wave"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not wave"; } else { print "do not wave"; } 2: print "did not wave"; 3: if (vp == 3) { print "has not waved"; } else { print "have not waved"; } 4: print "had not waved"; 5: print "will not wave"; } } ]; [ ConjugateVerb_67 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "win"; 2: print "won"; 3: print "winning"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "wins"; } else { print "win"; } 2: print "won"; 3: if (vp == 3) { print "has won"; } else { print "have won"; } 4: print "had won"; 5: print "will win"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not win"; } else { print "do not win"; } 2: print "did not win"; 3: if (vp == 3) { print "has not won"; } else { print "have not won"; } 4: print "had not won"; 5: print "will not win"; } } ]; [ ConjugateVerb_68 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "could"; 2: print "coulded"; 3: print "coulding"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "could"; if (modal_to) { print " "; modal_to(1); } 2: print "could"; if (modal_to) { print " "; modal_to(1); } 3: print "could"; if (modal_to) { print " "; modal_to(1); } 4: print "could"; if (modal_to) { print " "; modal_to(1); } 5: print "could"; if (modal_to) { print " "; modal_to(1); } 6: print "could"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "could have"; if (modal_to) { print " "; modal_to(2); } 2: print "could have"; if (modal_to) { print " "; modal_to(2); } 3: print "could have"; if (modal_to) { print " "; modal_to(2); } 4: print "could have"; if (modal_to) { print " "; modal_to(2); } 5: print "could have"; if (modal_to) { print " "; modal_to(2); } 6: print "could have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "could have"; if (modal_to) { print " "; modal_to(2); } 2: print "could have"; if (modal_to) { print " "; modal_to(2); } 3: print "could have"; if (modal_to) { print " "; modal_to(2); } 4: print "could have"; if (modal_to) { print " "; modal_to(2); } 5: print "could have"; if (modal_to) { print " "; modal_to(2); } 6: print "could have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "could have"; if (modal_to) { print " "; modal_to(2); } 2: print "could have"; if (modal_to) { print " "; modal_to(2); } 3: print "could have"; if (modal_to) { print " "; modal_to(2); } 4: print "could have"; if (modal_to) { print " "; modal_to(2); } 5: print "could have"; if (modal_to) { print " "; modal_to(2); } 6: print "could have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "could"; if (modal_to) { print " "; modal_to(1); } 2: print "could"; if (modal_to) { print " "; modal_to(1); } 3: print "could"; if (modal_to) { print " "; modal_to(1); } 4: print "could"; if (modal_to) { print " "; modal_to(1); } 5: print "could"; if (modal_to) { print " "; modal_to(1); } 6: print "could"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { 1: switch (vp) { 1: print "could not"; if (modal_to) { print " "; modal_to(1); } 2: print "could not"; if (modal_to) { print " "; modal_to(1); } 3: print "could not"; if (modal_to) { print " "; modal_to(1); } 4: print "could not"; if (modal_to) { print " "; modal_to(1); } 5: print "could not"; if (modal_to) { print " "; modal_to(1); } 6: print "could not"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "could not have"; if (modal_to) { print " "; modal_to(2); } 2: print "could not have"; if (modal_to) { print " "; modal_to(2); } 3: print "could not have"; if (modal_to) { print " "; modal_to(2); } 4: print "could not have"; if (modal_to) { print " "; modal_to(2); } 5: print "could not have"; if (modal_to) { print " "; modal_to(2); } 6: print "could not have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "could not have"; if (modal_to) { print " "; modal_to(2); } 2: print "could not have"; if (modal_to) { print " "; modal_to(2); } 3: print "could not have"; if (modal_to) { print " "; modal_to(2); } 4: print "could not have"; if (modal_to) { print " "; modal_to(2); } 5: print "could not have"; if (modal_to) { print " "; modal_to(2); } 6: print "could not have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "could not have"; if (modal_to) { print " "; modal_to(2); } 2: print "could not have"; if (modal_to) { print " "; modal_to(2); } 3: print "could not have"; if (modal_to) { print " "; modal_to(2); } 4: print "could not have"; if (modal_to) { print " "; modal_to(2); } 5: print "could not have"; if (modal_to) { print " "; modal_to(2); } 6: print "could not have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "could not"; if (modal_to) { print " "; modal_to(1); } 2: print "could not"; if (modal_to) { print " "; modal_to(1); } 3: print "could not"; if (modal_to) { print " "; modal_to(1); } 4: print "could not"; if (modal_to) { print " "; modal_to(1); } 5: print "could not"; if (modal_to) { print " "; modal_to(1); } 6: print "could not"; if (modal_to) { print " "; modal_to(1); } } } } ]; [ ConjugateVerb_69 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "may"; 2: print "mayed"; 3: print "maying"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "may"; if (modal_to) { print " "; modal_to(1); } 2: print "may"; if (modal_to) { print " "; modal_to(1); } 3: print "may"; if (modal_to) { print " "; modal_to(1); } 4: print "may"; if (modal_to) { print " "; modal_to(1); } 5: print "may"; if (modal_to) { print " "; modal_to(1); } 6: print "may"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "may have"; if (modal_to) { print " "; modal_to(2); } 2: print "may have"; if (modal_to) { print " "; modal_to(2); } 3: print "may have"; if (modal_to) { print " "; modal_to(2); } 4: print "may have"; if (modal_to) { print " "; modal_to(2); } 5: print "may have"; if (modal_to) { print " "; modal_to(2); } 6: print "may have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "may have"; if (modal_to) { print " "; modal_to(2); } 2: print "may have"; if (modal_to) { print " "; modal_to(2); } 3: print "may have"; if (modal_to) { print " "; modal_to(2); } 4: print "may have"; if (modal_to) { print " "; modal_to(2); } 5: print "may have"; if (modal_to) { print " "; modal_to(2); } 6: print "may have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "may have"; if (modal_to) { print " "; modal_to(2); } 2: print "may have"; if (modal_to) { print " "; modal_to(2); } 3: print "may have"; if (modal_to) { print " "; modal_to(2); } 4: print "may have"; if (modal_to) { print " "; modal_to(2); } 5: print "may have"; if (modal_to) { print " "; modal_to(2); } 6: print "may have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "may"; if (modal_to) { print " "; modal_to(1); } 2: print "may"; if (modal_to) { print " "; modal_to(1); } 3: print "may"; if (modal_to) { print " "; modal_to(1); } 4: print "may"; if (modal_to) { print " "; modal_to(1); } 5: print "may"; if (modal_to) { print " "; modal_to(1); } 6: print "may"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { 1: switch (vp) { 1: print "may not"; if (modal_to) { print " "; modal_to(1); } 2: print "may not"; if (modal_to) { print " "; modal_to(1); } 3: print "may not"; if (modal_to) { print " "; modal_to(1); } 4: print "may not"; if (modal_to) { print " "; modal_to(1); } 5: print "may not"; if (modal_to) { print " "; modal_to(1); } 6: print "may not"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "may not have"; if (modal_to) { print " "; modal_to(2); } 2: print "may not have"; if (modal_to) { print " "; modal_to(2); } 3: print "may not have"; if (modal_to) { print " "; modal_to(2); } 4: print "may not have"; if (modal_to) { print " "; modal_to(2); } 5: print "may not have"; if (modal_to) { print " "; modal_to(2); } 6: print "may not have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "may not have"; if (modal_to) { print " "; modal_to(2); } 2: print "may not have"; if (modal_to) { print " "; modal_to(2); } 3: print "may not have"; if (modal_to) { print " "; modal_to(2); } 4: print "may not have"; if (modal_to) { print " "; modal_to(2); } 5: print "may not have"; if (modal_to) { print " "; modal_to(2); } 6: print "may not have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "may not have"; if (modal_to) { print " "; modal_to(2); } 2: print "may not have"; if (modal_to) { print " "; modal_to(2); } 3: print "may not have"; if (modal_to) { print " "; modal_to(2); } 4: print "may not have"; if (modal_to) { print " "; modal_to(2); } 5: print "may not have"; if (modal_to) { print " "; modal_to(2); } 6: print "may not have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "may not"; if (modal_to) { print " "; modal_to(1); } 2: print "may not"; if (modal_to) { print " "; modal_to(1); } 3: print "may not"; if (modal_to) { print " "; modal_to(1); } 4: print "may not"; if (modal_to) { print " "; modal_to(1); } 5: print "may not"; if (modal_to) { print " "; modal_to(1); } 6: print "may not"; if (modal_to) { print " "; modal_to(1); } } } } ]; [ ConjugateVerb_70 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "might"; 2: print "mighted"; 3: print "mighting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "might"; if (modal_to) { print " "; modal_to(1); } 2: print "might"; if (modal_to) { print " "; modal_to(1); } 3: print "might"; if (modal_to) { print " "; modal_to(1); } 4: print "might"; if (modal_to) { print " "; modal_to(1); } 5: print "might"; if (modal_to) { print " "; modal_to(1); } 6: print "might"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "might have"; if (modal_to) { print " "; modal_to(2); } 2: print "might have"; if (modal_to) { print " "; modal_to(2); } 3: print "might have"; if (modal_to) { print " "; modal_to(2); } 4: print "might have"; if (modal_to) { print " "; modal_to(2); } 5: print "might have"; if (modal_to) { print " "; modal_to(2); } 6: print "might have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "might have"; if (modal_to) { print " "; modal_to(2); } 2: print "might have"; if (modal_to) { print " "; modal_to(2); } 3: print "might have"; if (modal_to) { print " "; modal_to(2); } 4: print "might have"; if (modal_to) { print " "; modal_to(2); } 5: print "might have"; if (modal_to) { print " "; modal_to(2); } 6: print "might have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "might have"; if (modal_to) { print " "; modal_to(2); } 2: print "might have"; if (modal_to) { print " "; modal_to(2); } 3: print "might have"; if (modal_to) { print " "; modal_to(2); } 4: print "might have"; if (modal_to) { print " "; modal_to(2); } 5: print "might have"; if (modal_to) { print " "; modal_to(2); } 6: print "might have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "might"; if (modal_to) { print " "; modal_to(1); } 2: print "might"; if (modal_to) { print " "; modal_to(1); } 3: print "might"; if (modal_to) { print " "; modal_to(1); } 4: print "might"; if (modal_to) { print " "; modal_to(1); } 5: print "might"; if (modal_to) { print " "; modal_to(1); } 6: print "might"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { 1: switch (vp) { 1: print "might not"; if (modal_to) { print " "; modal_to(1); } 2: print "might not"; if (modal_to) { print " "; modal_to(1); } 3: print "might not"; if (modal_to) { print " "; modal_to(1); } 4: print "might not"; if (modal_to) { print " "; modal_to(1); } 5: print "might not"; if (modal_to) { print " "; modal_to(1); } 6: print "might not"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "might not have"; if (modal_to) { print " "; modal_to(2); } 2: print "might not have"; if (modal_to) { print " "; modal_to(2); } 3: print "might not have"; if (modal_to) { print " "; modal_to(2); } 4: print "might not have"; if (modal_to) { print " "; modal_to(2); } 5: print "might not have"; if (modal_to) { print " "; modal_to(2); } 6: print "might not have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "might not have"; if (modal_to) { print " "; modal_to(2); } 2: print "might not have"; if (modal_to) { print " "; modal_to(2); } 3: print "might not have"; if (modal_to) { print " "; modal_to(2); } 4: print "might not have"; if (modal_to) { print " "; modal_to(2); } 5: print "might not have"; if (modal_to) { print " "; modal_to(2); } 6: print "might not have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "might not have"; if (modal_to) { print " "; modal_to(2); } 2: print "might not have"; if (modal_to) { print " "; modal_to(2); } 3: print "might not have"; if (modal_to) { print " "; modal_to(2); } 4: print "might not have"; if (modal_to) { print " "; modal_to(2); } 5: print "might not have"; if (modal_to) { print " "; modal_to(2); } 6: print "might not have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "might not"; if (modal_to) { print " "; modal_to(1); } 2: print "might not"; if (modal_to) { print " "; modal_to(1); } 3: print "might not"; if (modal_to) { print " "; modal_to(1); } 4: print "might not"; if (modal_to) { print " "; modal_to(1); } 5: print "might not"; if (modal_to) { print " "; modal_to(1); } 6: print "might not"; if (modal_to) { print " "; modal_to(1); } } } } ]; [ ConjugateVerb_71 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "must"; 2: print "musted"; 3: print "musting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "must"; if (modal_to) { print " "; modal_to(1); } 2: print "must"; if (modal_to) { print " "; modal_to(1); } 3: print "must"; if (modal_to) { print " "; modal_to(1); } 4: print "must"; if (modal_to) { print " "; modal_to(1); } 5: print "must"; if (modal_to) { print " "; modal_to(1); } 6: print "must"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "must have"; if (modal_to) { print " "; modal_to(2); } 2: print "must have"; if (modal_to) { print " "; modal_to(2); } 3: print "must have"; if (modal_to) { print " "; modal_to(2); } 4: print "must have"; if (modal_to) { print " "; modal_to(2); } 5: print "must have"; if (modal_to) { print " "; modal_to(2); } 6: print "must have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "must have"; if (modal_to) { print " "; modal_to(2); } 2: print "must have"; if (modal_to) { print " "; modal_to(2); } 3: print "must have"; if (modal_to) { print " "; modal_to(2); } 4: print "must have"; if (modal_to) { print " "; modal_to(2); } 5: print "must have"; if (modal_to) { print " "; modal_to(2); } 6: print "must have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "must have"; if (modal_to) { print " "; modal_to(2); } 2: print "must have"; if (modal_to) { print " "; modal_to(2); } 3: print "must have"; if (modal_to) { print " "; modal_to(2); } 4: print "must have"; if (modal_to) { print " "; modal_to(2); } 5: print "must have"; if (modal_to) { print " "; modal_to(2); } 6: print "must have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "must"; if (modal_to) { print " "; modal_to(1); } 2: print "must"; if (modal_to) { print " "; modal_to(1); } 3: print "must"; if (modal_to) { print " "; modal_to(1); } 4: print "must"; if (modal_to) { print " "; modal_to(1); } 5: print "must"; if (modal_to) { print " "; modal_to(1); } 6: print "must"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { 1: switch (vp) { 1: print "must not"; if (modal_to) { print " "; modal_to(1); } 2: print "must not"; if (modal_to) { print " "; modal_to(1); } 3: print "must not"; if (modal_to) { print " "; modal_to(1); } 4: print "must not"; if (modal_to) { print " "; modal_to(1); } 5: print "must not"; if (modal_to) { print " "; modal_to(1); } 6: print "must not"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "must not have"; if (modal_to) { print " "; modal_to(2); } 2: print "must not have"; if (modal_to) { print " "; modal_to(2); } 3: print "must not have"; if (modal_to) { print " "; modal_to(2); } 4: print "must not have"; if (modal_to) { print " "; modal_to(2); } 5: print "must not have"; if (modal_to) { print " "; modal_to(2); } 6: print "must not have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "must not have"; if (modal_to) { print " "; modal_to(2); } 2: print "must not have"; if (modal_to) { print " "; modal_to(2); } 3: print "must not have"; if (modal_to) { print " "; modal_to(2); } 4: print "must not have"; if (modal_to) { print " "; modal_to(2); } 5: print "must not have"; if (modal_to) { print " "; modal_to(2); } 6: print "must not have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "must not have"; if (modal_to) { print " "; modal_to(2); } 2: print "must not have"; if (modal_to) { print " "; modal_to(2); } 3: print "must not have"; if (modal_to) { print " "; modal_to(2); } 4: print "must not have"; if (modal_to) { print " "; modal_to(2); } 5: print "must not have"; if (modal_to) { print " "; modal_to(2); } 6: print "must not have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "must not"; if (modal_to) { print " "; modal_to(1); } 2: print "must not"; if (modal_to) { print " "; modal_to(1); } 3: print "must not"; if (modal_to) { print " "; modal_to(1); } 4: print "must not"; if (modal_to) { print " "; modal_to(1); } 5: print "must not"; if (modal_to) { print " "; modal_to(1); } 6: print "must not"; if (modal_to) { print " "; modal_to(1); } } } } ]; [ ConjugateVerb_72 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "should"; 2: print "shoulded"; 3: print "shoulding"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "should"; if (modal_to) { print " "; modal_to(1); } 2: print "should"; if (modal_to) { print " "; modal_to(1); } 3: print "should"; if (modal_to) { print " "; modal_to(1); } 4: print "should"; if (modal_to) { print " "; modal_to(1); } 5: print "should"; if (modal_to) { print " "; modal_to(1); } 6: print "should"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "should have"; if (modal_to) { print " "; modal_to(2); } 2: print "should have"; if (modal_to) { print " "; modal_to(2); } 3: print "should have"; if (modal_to) { print " "; modal_to(2); } 4: print "should have"; if (modal_to) { print " "; modal_to(2); } 5: print "should have"; if (modal_to) { print " "; modal_to(2); } 6: print "should have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "should have"; if (modal_to) { print " "; modal_to(2); } 2: print "should have"; if (modal_to) { print " "; modal_to(2); } 3: print "should have"; if (modal_to) { print " "; modal_to(2); } 4: print "should have"; if (modal_to) { print " "; modal_to(2); } 5: print "should have"; if (modal_to) { print " "; modal_to(2); } 6: print "should have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "should have"; if (modal_to) { print " "; modal_to(2); } 2: print "should have"; if (modal_to) { print " "; modal_to(2); } 3: print "should have"; if (modal_to) { print " "; modal_to(2); } 4: print "should have"; if (modal_to) { print " "; modal_to(2); } 5: print "should have"; if (modal_to) { print " "; modal_to(2); } 6: print "should have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "should"; if (modal_to) { print " "; modal_to(1); } 2: print "should"; if (modal_to) { print " "; modal_to(1); } 3: print "should"; if (modal_to) { print " "; modal_to(1); } 4: print "should"; if (modal_to) { print " "; modal_to(1); } 5: print "should"; if (modal_to) { print " "; modal_to(1); } 6: print "should"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { 1: switch (vp) { 1: print "should not"; if (modal_to) { print " "; modal_to(1); } 2: print "should not"; if (modal_to) { print " "; modal_to(1); } 3: print "should not"; if (modal_to) { print " "; modal_to(1); } 4: print "should not"; if (modal_to) { print " "; modal_to(1); } 5: print "should not"; if (modal_to) { print " "; modal_to(1); } 6: print "should not"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "should not have"; if (modal_to) { print " "; modal_to(2); } 2: print "should not have"; if (modal_to) { print " "; modal_to(2); } 3: print "should not have"; if (modal_to) { print " "; modal_to(2); } 4: print "should not have"; if (modal_to) { print " "; modal_to(2); } 5: print "should not have"; if (modal_to) { print " "; modal_to(2); } 6: print "should not have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "should not have"; if (modal_to) { print " "; modal_to(2); } 2: print "should not have"; if (modal_to) { print " "; modal_to(2); } 3: print "should not have"; if (modal_to) { print " "; modal_to(2); } 4: print "should not have"; if (modal_to) { print " "; modal_to(2); } 5: print "should not have"; if (modal_to) { print " "; modal_to(2); } 6: print "should not have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "should not have"; if (modal_to) { print " "; modal_to(2); } 2: print "should not have"; if (modal_to) { print " "; modal_to(2); } 3: print "should not have"; if (modal_to) { print " "; modal_to(2); } 4: print "should not have"; if (modal_to) { print " "; modal_to(2); } 5: print "should not have"; if (modal_to) { print " "; modal_to(2); } 6: print "should not have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "should not"; if (modal_to) { print " "; modal_to(1); } 2: print "should not"; if (modal_to) { print " "; modal_to(1); } 3: print "should not"; if (modal_to) { print " "; modal_to(1); } 4: print "should not"; if (modal_to) { print " "; modal_to(1); } 5: print "should not"; if (modal_to) { print " "; modal_to(1); } 6: print "should not"; if (modal_to) { print " "; modal_to(1); } } } } ]; [ ConjugateVerb_73 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "would"; 2: print "woulded"; 3: print "woulding"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "would"; if (modal_to) { print " "; modal_to(1); } 2: print "would"; if (modal_to) { print " "; modal_to(1); } 3: print "would"; if (modal_to) { print " "; modal_to(1); } 4: print "would"; if (modal_to) { print " "; modal_to(1); } 5: print "would"; if (modal_to) { print " "; modal_to(1); } 6: print "would"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "would have"; if (modal_to) { print " "; modal_to(2); } 2: print "would have"; if (modal_to) { print " "; modal_to(2); } 3: print "would have"; if (modal_to) { print " "; modal_to(2); } 4: print "would have"; if (modal_to) { print " "; modal_to(2); } 5: print "would have"; if (modal_to) { print " "; modal_to(2); } 6: print "would have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "would have"; if (modal_to) { print " "; modal_to(2); } 2: print "would have"; if (modal_to) { print " "; modal_to(2); } 3: print "would have"; if (modal_to) { print " "; modal_to(2); } 4: print "would have"; if (modal_to) { print " "; modal_to(2); } 5: print "would have"; if (modal_to) { print " "; modal_to(2); } 6: print "would have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "would have"; if (modal_to) { print " "; modal_to(2); } 2: print "would have"; if (modal_to) { print " "; modal_to(2); } 3: print "would have"; if (modal_to) { print " "; modal_to(2); } 4: print "would have"; if (modal_to) { print " "; modal_to(2); } 5: print "would have"; if (modal_to) { print " "; modal_to(2); } 6: print "would have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "would"; if (modal_to) { print " "; modal_to(1); } 2: print "would"; if (modal_to) { print " "; modal_to(1); } 3: print "would"; if (modal_to) { print " "; modal_to(1); } 4: print "would"; if (modal_to) { print " "; modal_to(1); } 5: print "would"; if (modal_to) { print " "; modal_to(1); } 6: print "would"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { 1: switch (vp) { 1: print "would not"; if (modal_to) { print " "; modal_to(1); } 2: print "would not"; if (modal_to) { print " "; modal_to(1); } 3: print "would not"; if (modal_to) { print " "; modal_to(1); } 4: print "would not"; if (modal_to) { print " "; modal_to(1); } 5: print "would not"; if (modal_to) { print " "; modal_to(1); } 6: print "would not"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "would not have"; if (modal_to) { print " "; modal_to(2); } 2: print "would not have"; if (modal_to) { print " "; modal_to(2); } 3: print "would not have"; if (modal_to) { print " "; modal_to(2); } 4: print "would not have"; if (modal_to) { print " "; modal_to(2); } 5: print "would not have"; if (modal_to) { print " "; modal_to(2); } 6: print "would not have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "would not have"; if (modal_to) { print " "; modal_to(2); } 2: print "would not have"; if (modal_to) { print " "; modal_to(2); } 3: print "would not have"; if (modal_to) { print " "; modal_to(2); } 4: print "would not have"; if (modal_to) { print " "; modal_to(2); } 5: print "would not have"; if (modal_to) { print " "; modal_to(2); } 6: print "would not have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "would not have"; if (modal_to) { print " "; modal_to(2); } 2: print "would not have"; if (modal_to) { print " "; modal_to(2); } 3: print "would not have"; if (modal_to) { print " "; modal_to(2); } 4: print "would not have"; if (modal_to) { print " "; modal_to(2); } 5: print "would not have"; if (modal_to) { print " "; modal_to(2); } 6: print "would not have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "would not"; if (modal_to) { print " "; modal_to(1); } 2: print "would not"; if (modal_to) { print " "; modal_to(1); } 3: print "would not"; if (modal_to) { print " "; modal_to(1); } 4: print "would not"; if (modal_to) { print " "; modal_to(1); } 5: print "would not"; if (modal_to) { print " "; modal_to(1); } 6: print "would not"; if (modal_to) { print " "; modal_to(1); } } } } ]; [ ConjugateVerb_74 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "'re"; 2: print " been"; 3: print " being"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "'m"; 2: print "'re"; 3: print "'s"; 4: print "'re"; 5: print "'re"; 6: print "'re"; } 2: switch (vp) { 1: print " was"; 2: print " were"; 3: print " was"; 4: print " were"; 5: print " were"; 6: print " were"; } 3: if (vp == 3) { print "'s been"; } else { print "'ve been"; } 4: print "'d been"; 5: print "'ll be"; } CV_NEG: switch (t) { 1: switch (vp) { 1: print "'m not"; 2: print "'re not"; 3: print "'s not"; 4: print "'re not"; 5: print "'re not"; 6: print "'re not"; } 2: switch (vp) { 1: print " wasn't"; 2: print " weren't"; 3: print " wasn't"; 4: print " weren't"; 5: print " weren't"; 6: print " weren't"; } 3: if (vp == 3) { print "'s not been"; } else { print "'ve not been"; } 4: print "'d not been"; 5: print "'ll not be"; } } ]; [ ConjugateVerb_75 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "'ve"; 2: print " had"; 3: print " having"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "'s"; } else { print "'ve"; } 2: print " had"; 3: if (vp == 3) { print "'s had"; } else { print "'ve had"; } 4: print "'d had"; 5: print "'ll have"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "'s not"; } else { print "'ve not"; } 2: print " hadn't"; 3: if (vp == 3) { print "'s not had"; } else { print "'ve not had"; } 4: print "'d not had"; 5: print "'ll not have"; } } ]; [ ConjugateVerb_76 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "aren't"; 2: print "aren'ted"; 3: print "aren'ting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "am not"; 2: print "aren't"; 3: print "isn't"; 4: print "aren't"; 5: print "aren't"; 6: print "aren't"; } 2: switch (vp) { 1: print "wasn't"; 2: print "weren't"; 3: print "wasn't"; 4: print "weren't"; 5: print "weren't"; 6: print "weren't"; } 3: if (vp == 3) { print "hasn't been"; } else { print "haven't been"; } 4: print "hadn't been"; 5: print "won't be"; } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_77 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "can't"; 2: print "can'ted"; 3: print "can'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "can't"; if (modal_to) { print " "; modal_to(1); } 2: print "can't"; if (modal_to) { print " "; modal_to(1); } 3: print "can't"; if (modal_to) { print " "; modal_to(1); } 4: print "can't"; if (modal_to) { print " "; modal_to(1); } 5: print "can't"; if (modal_to) { print " "; modal_to(1); } 6: print "can't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 2: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 3: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 4: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 5: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 6: print "couldn't"; if (modal_to) { print " "; modal_to(1); } } 3: switch (vp) { 1: print "haven't been able to"; if (modal_to) { print " "; modal_to(1); } 2: print "haven't been able to"; if (modal_to) { print " "; modal_to(1); } 3: print "hasn't been able to"; if (modal_to) { print " "; modal_to(1); } 4: print "haven't been able to"; if (modal_to) { print " "; modal_to(1); } 5: print "haven't been able to"; if (modal_to) { print " "; modal_to(1); } 6: print "haven't been able to"; if (modal_to) { print " "; modal_to(1); } } 4: switch (vp) { 1: print "hadn't been able to"; if (modal_to) { print " "; modal_to(1); } 2: print "hadn't been able to"; if (modal_to) { print " "; modal_to(1); } 3: print "hadn't been able to"; if (modal_to) { print " "; modal_to(1); } 4: print "hadn't been able to"; if (modal_to) { print " "; modal_to(1); } 5: print "hadn't been able to"; if (modal_to) { print " "; modal_to(1); } 6: print "hadn't been able to"; if (modal_to) { print " "; modal_to(1); } } 5: switch (vp) { 1: print "won't be able to"; if (modal_to) { print " "; modal_to(1); } 2: print "won't be able to"; if (modal_to) { print " "; modal_to(1); } 3: print "won't be able to"; if (modal_to) { print " "; modal_to(1); } 4: print "won't be able to"; if (modal_to) { print " "; modal_to(1); } 5: print "won't be able to"; if (modal_to) { print " "; modal_to(1); } 6: print "won't be able to"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_78 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "haven't"; 2: print "haven'ted"; 3: print "haven'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "haven't"; if (modal_to) { print " "; modal_to(1); } 2: print "haven't"; if (modal_to) { print " "; modal_to(1); } 3: print "hasn't"; if (modal_to) { print " "; modal_to(1); } 4: print "haven't"; if (modal_to) { print " "; modal_to(1); } 5: print "haven't"; if (modal_to) { print " "; modal_to(1); } 6: print "haven't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 2: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 3: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 4: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 5: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 6: print "hadn't"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 2: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 3: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 4: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 5: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 6: print "hadn't"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 2: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 3: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 4: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 5: print "hadn't"; if (modal_to) { print " "; modal_to(2); } 6: print "hadn't"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "won't have"; if (modal_to) { print " "; modal_to(1); } 2: print "won't have"; if (modal_to) { print " "; modal_to(1); } 3: print "won't have"; if (modal_to) { print " "; modal_to(1); } 4: print "won't have"; if (modal_to) { print " "; modal_to(1); } 5: print "won't have"; if (modal_to) { print " "; modal_to(1); } 6: print "won't have"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_79 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "don't"; 2: print "don'ted"; 3: print "don'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "don't"; if (modal_to) { print " "; modal_to(1); } 2: print "don't"; if (modal_to) { print " "; modal_to(1); } 3: print "doesn't"; if (modal_to) { print " "; modal_to(1); } 4: print "don't"; if (modal_to) { print " "; modal_to(1); } 5: print "don't"; if (modal_to) { print " "; modal_to(1); } 6: print "don't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "didn't"; if (modal_to) { print " "; modal_to(2); } 2: print "didn't"; if (modal_to) { print " "; modal_to(2); } 3: print "didn't"; if (modal_to) { print " "; modal_to(2); } 4: print "didn't"; if (modal_to) { print " "; modal_to(2); } 5: print "didn't"; if (modal_to) { print " "; modal_to(2); } 6: print "didn't"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "didn't"; if (modal_to) { print " "; modal_to(2); } 2: print "didn't"; if (modal_to) { print " "; modal_to(2); } 3: print "didn't"; if (modal_to) { print " "; modal_to(2); } 4: print "didn't"; if (modal_to) { print " "; modal_to(2); } 5: print "didn't"; if (modal_to) { print " "; modal_to(2); } 6: print "didn't"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "didn't"; if (modal_to) { print " "; modal_to(2); } 2: print "didn't"; if (modal_to) { print " "; modal_to(2); } 3: print "didn't"; if (modal_to) { print " "; modal_to(2); } 4: print "didn't"; if (modal_to) { print " "; modal_to(2); } 5: print "didn't"; if (modal_to) { print " "; modal_to(2); } 6: print "didn't"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "won't"; if (modal_to) { print " "; modal_to(1); } 2: print "won't"; if (modal_to) { print " "; modal_to(1); } 3: print "won't"; if (modal_to) { print " "; modal_to(1); } 4: print "won't"; if (modal_to) { print " "; modal_to(1); } 5: print "won't"; if (modal_to) { print " "; modal_to(1); } 6: print "won't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_80 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "mustn't"; 2: print "mustn'ted"; 3: print "mustn'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 2: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 3: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 4: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 5: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 6: print "mustn't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mustn't have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 2: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 3: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 4: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 5: print "mustn't"; if (modal_to) { print " "; modal_to(1); } 6: print "mustn't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_81 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "mightn't"; 2: print "mightn'ted"; 3: print "mightn'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 2: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 3: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 4: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 5: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 6: print "mightn't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mightn't have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 2: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 3: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 4: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 5: print "mightn't"; if (modal_to) { print " "; modal_to(1); } 6: print "mightn't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_82 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "mayn't"; 2: print "mayn'ted"; 3: print "mayn'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 2: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 3: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 4: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 5: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 6: print "mayn't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "mayn't have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 2: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 3: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 4: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 5: print "mayn't"; if (modal_to) { print " "; modal_to(1); } 6: print "mayn't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_83 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "wouldn't"; 2: print "wouldn'ted"; 3: print "wouldn'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 2: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 3: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 4: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 5: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 6: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "wouldn't have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 2: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 3: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 4: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 5: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } 6: print "wouldn't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_84 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "couldn't"; 2: print "couldn'ted"; 3: print "couldn'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 2: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 3: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 4: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 5: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 6: print "couldn't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "couldn't have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 2: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 3: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 4: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 5: print "couldn't"; if (modal_to) { print " "; modal_to(1); } 6: print "couldn't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_85 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "shouldn't"; 2: print "shouldn'ted"; 3: print "shouldn'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 2: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 3: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 4: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 5: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 6: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 2: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 3: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 4: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 5: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } 6: print "shouldn't have"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 2: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 3: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 4: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 5: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } 6: print "shouldn't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_86 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "won't"; 2: print "won'ted"; 3: print "won'ting"; CV_MODAL: return true; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: switch (vp) { 1: print "won't"; if (modal_to) { print " "; modal_to(1); } 2: print "won't"; if (modal_to) { print " "; modal_to(1); } 3: print "won't"; if (modal_to) { print " "; modal_to(1); } 4: print "won't"; if (modal_to) { print " "; modal_to(1); } 5: print "won't"; if (modal_to) { print " "; modal_to(1); } 6: print "won't"; if (modal_to) { print " "; modal_to(1); } } 2: switch (vp) { 1: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 2: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 3: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 4: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 5: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 6: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } } 3: switch (vp) { 1: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 2: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 3: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 4: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 5: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 6: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } } 4: switch (vp) { 1: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 2: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 3: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 4: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 5: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } 6: print "wouldn't"; if (modal_to) { print " "; modal_to(2); } } 5: switch (vp) { 1: print "won't"; if (modal_to) { print " "; modal_to(1); } 2: print "won't"; if (modal_to) { print " "; modal_to(1); } 3: print "won't"; if (modal_to) { print " "; modal_to(1); } 4: print "won't"; if (modal_to) { print " "; modal_to(1); } 5: print "won't"; if (modal_to) { print " "; modal_to(1); } 6: print "won't"; if (modal_to) { print " "; modal_to(1); } } } CV_NEG: switch (t) { } } ]; [ ConjugateVerb_87 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "fit"; 2: print "fitted"; 3: print "fitting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_0; CV_POS: switch (t) { 1: if (vp == 3) { print "fits"; } else { print "fit"; } 2: print "fitted"; 3: if (vp == 3) { print "has fitted"; } else { print "have fitted"; } 4: print "had fitted"; 5: print "will fit"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not fit"; } else { print "do not fit"; } 2: print "did not fit"; 3: if (vp == 3) { print "has not fitted"; } else { print "have not fitted"; } 4: print "had not fitted"; 5: print "will not fit"; } } ]; [ ConjugateVerb_88 fn ! Implied call parameter vp ! Implied call parameter t ! Implied call parameter modal_to ! Implied call parameter ; switch (fn) { 1: print "unbolt"; 2: print "unbolted"; 3: print "unbolting"; CV_MODAL: return false; CV_MEANING: return Rel_Record_71; CV_POS: switch (t) { 1: if (vp == 3) { print "unbolts"; } else { print "unbolt"; } 2: print "unbolted"; 3: if (vp == 3) { print "has unbolted"; } else { print "have unbolted"; } 4: print "had unbolted"; 5: print "will unbolt"; } CV_NEG: switch (t) { 1: if (vp == 3) { print "does not unbolt"; } else { print "do not unbolt"; } 2: print "did not unbolt"; 3: if (vp == 3) { print "has not unbolted"; } else { print "have not unbolted"; } 4: print "had not unbolted"; 5: print "will not unbolt"; } } ]; Array TableOfVerbs --> ConjugateVerb_0 ConjugateVerb_2 ConjugateVerb_3 ConjugateVerb_4 ConjugateVerb_5 ConjugateVerb_6 ConjugateVerb_7 ConjugateVerb_8 ConjugateVerb_9 ConjugateVerb_10 ConjugateVerb_11 ConjugateVerb_12 ConjugateVerb_13 ConjugateVerb_14 ConjugateVerb_15 ConjugateVerb_16 ConjugateVerb_17 ConjugateVerb_18 ConjugateVerb_19 ConjugateVerb_20 ConjugateVerb_21 ConjugateVerb_22 ConjugateVerb_23 ConjugateVerb_24 ConjugateVerb_25 ConjugateVerb_26 ConjugateVerb_27 ConjugateVerb_28 ConjugateVerb_29 ConjugateVerb_30 ConjugateVerb_31 ConjugateVerb_32 ConjugateVerb_33 ConjugateVerb_34 ConjugateVerb_35 ConjugateVerb_36 ConjugateVerb_37 ConjugateVerb_38 ConjugateVerb_39 ConjugateVerb_40 ConjugateVerb_41 ConjugateVerb_42 ConjugateVerb_43 ConjugateVerb_44 ConjugateVerb_45 ConjugateVerb_46 ConjugateVerb_47 ConjugateVerb_48 ConjugateVerb_49 ConjugateVerb_50 ConjugateVerb_51 ConjugateVerb_52 ConjugateVerb_53 ConjugateVerb_54 ConjugateVerb_55 ConjugateVerb_56 ConjugateVerb_57 ConjugateVerb_58 ConjugateVerb_59 ConjugateVerb_60 ConjugateVerb_61 ConjugateVerb_62 ConjugateVerb_63 ConjugateVerb_64 ConjugateVerb_65 ConjugateVerb_66 ConjugateVerb_67 ConjugateVerb_68 ConjugateVerb_69 ConjugateVerb_70 ConjugateVerb_71 ConjugateVerb_72 ConjugateVerb_73 ConjugateVerb_87 ConjugateVerb_88 0; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Testing commands ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF DEBUG; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Abstract Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ XAbstractSub; if (XTestMove(noun, second)) return; move noun to second; "[Abstracted.]"; ]; [ XTestMove obj dest; if (obj <= InformLibrary) "[Can't move ", (name) obj, ": it's a system object.]"; if (obj.component_parent) "[Can't move ", (name) obj, ": it's part of ", (the) obj.component_parent, ".]"; while (dest) { if (dest == obj) "[Can't move ", (name) obj, ": it would contain itself.]"; dest = CoreOfParentOfCoreOf(dest); } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Actions Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ActionsOnSub; trace_actions = 1; say__p = 1; "Actions listing on."; ]; [ ActionsOffSub; trace_actions = 0; say__p = 1; "Actions listing off."; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Gonear Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GonearSub; PlayerTo(LocationOf(noun)); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Purloin Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ XPurloinSub; if (XTestMove(noun, player)) return; move noun to player; give noun moved ~concealed; say__p = 1; "[Purloined.]"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Random Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ PredictableSub; VM_Seed_RNG(-100); say__p = 1; "[Random number generator now predictable.]"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Relations Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ShowRelationsSub; IterateRelations(ShowOneRelation); ]; [ ShowOneRelation rel; if ((RlnGetF(rel, RR_PERMISSIONS)) & (RELS_SHOW)) { (RlnGetF(rel, RR_HANDLER))(rel, RELS_SHOW); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Responses Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global suppress_text_substitution = false; [ ShowResponsesSub a i j reg wd set_mode; if (NO_RESPONSES == 0) "There are no lettered responses."; wn = 2; if (NextWordStopped() == 'now') set_mode = 1; else wn--; if (NextWordStopped() == 'set') set_mode = 2; else wn--; wd = NextWordStopped(); wn--; if (wd == 'all') reg = 0; else { reg = -1; if (wd ~= -1) reg = TryNumber(wn); if (reg < 0) { say__p = 1; print ">--> The following sets of responses are available:^"; print " RESPONSES ALL^"; } } for (a=0, i=1, j=0: ResponseDivisions-->a: a=a+3, i++) { if (ResponseDivisions-->a ~= EMPTY_TEXT_PACKED) j++; if ((reg == 0) || (reg == j)) { if (ResponseDivisions-->a ~= EMPTY_TEXT_PACKED) { if (set_mode) { print "[", (string) ResponseDivisions-->a, "]^"; } else { print (string) ResponseDivisions-->a, ":^"; } } ShowResponsesRange(ResponseDivisions-->(a+1), ResponseDivisions-->(a+2), set_mode); } if (reg < 0) { if (ResponseDivisions-->a ~= EMPTY_TEXT_PACKED) { print " RESPONSES ", j, ": ", (string) ResponseDivisions-->a, "^"; } } } ]; [ ShowResponsesRange from to set_mode i; say__p = 1; for (i=from: i<=to: i++) { switch (set_mode) { 1: print "now "; 2: ; 0: print " "; } print (PrintResponse) i; switch (set_mode) { 1: print " is "; 2: print " is "; 0: print ": "; } suppress_text_substitution = true; CarryOutActivity(PRINTING_RESPONSE_ACT, i); suppress_text_substitution = false; switch (set_mode) { 1: print ";"; 2: print "."; } print "^"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Rules Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RulesOnSub; debug_rules = 1; say__p = 1; "Rules tracing now switched on. Type ~rules off~ to switch it off again, or ~rules all~ to include even rules which do not apply."; ]; [ RulesAllSub; debug_rules = 2; say__p = 1; "Rules tracing now switched to ~all~. Type ~rules off~ to switch it off again."; ]; [ RulesOffSub; debug_rules = 0; say__p = 1; "Rules tracing now switched off. Type ~rules~ to switch it on again."; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Scenes Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ScenesOnSub; debug_scenes = 1; ShowSceneStatus(); say__p = 1; "(Scene monitoring now switched on. Type ~scenes off~ to switch it off again.)"; ]; [ ScenesOffSub; debug_scenes = 0; say__p = 1; "(Scene monitoring now switched off. Type ~scenes~ to switch it on again.)"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Scope Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global x_scope_count; [ ScopeSub; x_scope_count = 0; LoopOverScope(Print_ScL, noun); if (x_scope_count == 0) "Nothing is in scope."; ]; [ Print_ScL obj; print_ret ++x_scope_count, ": ", (a) obj, " (", obj, ")"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Showheap Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ShowHeapSub; HeapDebug(); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: ShowMe Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ShowMeSub t_0 na; t_0 = noun; if (noun == nothing) noun = real_location; if (ShowMeRecursively(noun, 0, (noun == real_location))) { if (noun == real_location) print "* denotes things which are not in scope^"; } if (t_0 ofclass K2_thing) { print "location:"; ShowRLocation(noun, true); print "^"; } if (t_0) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(pluralname)) && (t_0 has pluralname)) { if (na++ > 0) print ", "; print "plural-named"; } if ((AllowInShowme(pluralname)) && (t_0 hasnt pluralname)) { if (na++ > 0) print ", "; print "singular-named"; } if ((AllowInShowme(proper)) && (t_0 has proper)) { if (na++ > 0) print ", "; print "proper-named"; } if ((AllowInShowme(proper)) && (t_0 hasnt proper)) { if (na++ > 0) print ", "; print "improper-named"; } if ((AllowInShowme(ambigpluralname)) && (t_0 has ambigpluralname)) { if (na++ > 0) print ", "; print "ambiguously plural"; } } if (t_0 ofclass K1_room) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(light)) && (t_0 has light)) { if (na++ > 0) print ", "; print "lighted"; } if ((AllowInShowme(light)) && (t_0 hasnt light)) { if (na++ > 0) print ", "; print "dark"; } if ((AllowInShowme(visited)) && (t_0 has visited)) { if (na++ > 0) print ", "; print "visited"; } if ((AllowInShowme(visited)) && (t_0 hasnt visited)) { if (na++ > 0) print ", "; print "unvisited"; } } if (t_0 ofclass K2_thing) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(light)) && (t_0 has light)) { if (na++ > 0) print ", "; print "lit"; } if ((AllowInShowme(light)) && (t_0 hasnt light)) { if (na++ > 0) print ", "; print "unlit"; } if ((AllowInShowme(edible)) && (t_0 has edible)) { if (na++ > 0) print ", "; print "edible"; } if ((AllowInShowme(edible)) && (t_0 hasnt edible)) { if (na++ > 0) print ", "; print "inedible"; } if ((AllowInShowme(static)) && (t_0 has static)) { if (na++ > 0) print ", "; print "fixed in place"; } if ((AllowInShowme(static)) && (t_0 hasnt static)) { if (na++ > 0) print ", "; print "portable"; } if ((AllowInShowme(scenery)) && (t_0 has scenery)) { if (na++ > 0) print ", "; print "scenery"; } if ((AllowInShowme(clothing)) && (t_0 has clothing)) { if (na++ > 0) print ", "; print "wearable"; } if ((AllowInShowme(pushable)) && (t_0 has pushable)) { if (na++ > 0) print ", "; print "pushable between rooms"; } if ((AllowInShowme(moved)) && (t_0 has moved)) { if (na++ > 0) print ", "; print "handled"; } if ((AllowInShowme(concealed)) && (t_0 hasnt concealed)) { if (na++ > 0) print ", "; print "described"; } if ((AllowInShowme(concealed)) && (t_0 has concealed)) { if (na++ > 0) print ", "; print "undescribed"; } if ((AllowInShowme(workflag)) && (t_0 has workflag)) { if (na++ > 0) print ", "; print "marked for listing"; } if ((AllowInShowme(workflag)) && (t_0 hasnt workflag)) { if (na++ > 0) print ", "; print "unmarked for listing"; } if ((AllowInShowme(mentioned)) && (t_0 has mentioned)) { if (na++ > 0) print ", "; print "mentioned"; } if ((AllowInShowme(mentioned)) && (t_0 hasnt mentioned)) { if (na++ > 0) print ", "; print "unmentioned"; } } if (t_0 ofclass K3_direction) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(workflag)) && (t_0 has workflag)) { if (na++ > 0) print ", "; print "marked for listing"; } if ((AllowInShowme(workflag)) && (t_0 hasnt workflag)) { if (na++ > 0) print ", "; print "unmarked for listing"; } } if (t_0 ofclass K4_door) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(open)) && (t_0 has open)) { if (na++ > 0) print ", "; print "open"; } if ((AllowInShowme(open)) && (t_0 hasnt open)) { if (na++ > 0) print ", "; print "closed"; } if ((AllowInShowme(openable)) && (t_0 has openable)) { if (na++ > 0) print ", "; print "openable"; } if ((AllowInShowme(openable)) && (t_0 hasnt openable)) { if (na++ > 0) print ", "; print "unopenable"; } if ((AllowInShowme(lockable)) && (t_0 has lockable)) { if (na++ > 0) print ", "; print "lockable"; } if ((AllowInShowme(locked)) && (t_0 has locked)) { if (na++ > 0) print ", "; print "locked"; } if ((AllowInShowme(locked)) && (t_0 hasnt locked)) { if (na++ > 0) print ", "; print "unlocked"; } } if (t_0 ofclass K5_container) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(enterable)) && (t_0 has enterable)) { if (na++ > 0) print ", "; print "enterable"; } if ((AllowInShowme(transparent)) && (t_0 hasnt transparent)) { if (na++ > 0) print ", "; print "opaque"; } if ((AllowInShowme(transparent)) && (t_0 has transparent)) { if (na++ > 0) print ", "; print "transparent"; } if ((AllowInShowme(open)) && (t_0 has open)) { if (na++ > 0) print ", "; print "open"; } if ((AllowInShowme(open)) && (t_0 hasnt open)) { if (na++ > 0) print ", "; print "closed"; } if ((AllowInShowme(openable)) && (t_0 has openable)) { if (na++ > 0) print ", "; print "openable"; } if ((AllowInShowme(openable)) && (t_0 hasnt openable)) { if (na++ > 0) print ", "; print "unopenable"; } if ((AllowInShowme(lockable)) && (t_0 has lockable)) { if (na++ > 0) print ", "; print "lockable"; } if ((AllowInShowme(locked)) && (t_0 has locked)) { if (na++ > 0) print ", "; print "locked"; } if ((AllowInShowme(locked)) && (t_0 hasnt locked)) { if (na++ > 0) print ", "; print "unlocked"; } } if (t_0 ofclass K6_supporter) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(enterable)) && (t_0 has enterable)) { if (na++ > 0) print ", "; print "enterable"; } } if (t_0 ofclass K8_person) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(female)) && (t_0 has female)) { if (na++ > 0) print ", "; print "female"; } if ((AllowInShowme(female)) && (t_0 hasnt female)) { if (na++ > 0) print ", "; print "male"; } if ((AllowInShowme(neuter)) && (t_0 has neuter)) { if (na++ > 0) print ", "; print "neuter"; } } if (t_0 ofclass K13_device) {if (na > 0) { na = 0; print "; "; } if ((AllowInShowme(on)) && (t_0 has on)) { if (na++ > 0) print ", "; print "switched on"; } if ((AllowInShowme(on)) && (t_0 hasnt on)) { if (na++ > 0) print ", "; print "switched off"; } } if (t_0) {if (na > 0) { na = 0; print "^"; } print "list grouping key: "; if (TEXT_TY_Compare(GProperty(OBJECT_TY, t_0, list_together), EMPTY_TEXT_VALUE) == 0) print "none^"; else print "~", (TEXT_TY_Say) GProperty(OBJECT_TY, t_0, list_together), "~", "^"; print "printed name: "; if (TEXT_TY_Compare(GProperty(OBJECT_TY, t_0, short_name), EMPTY_TEXT_VALUE) == 0) print "none^"; else print "~", (TEXT_TY_Say) GProperty(OBJECT_TY, t_0, short_name), "~", "^"; print "printed plural name: "; if (TEXT_TY_Compare(GProperty(OBJECT_TY, t_0, plural), EMPTY_TEXT_VALUE) == 0) print "none^"; else print "~", (TEXT_TY_Say) GProperty(OBJECT_TY, t_0, plural), "~", "^"; print "indefinite article: "; if (TEXT_TY_Compare(GProperty(OBJECT_TY, t_0, article), EMPTY_TEXT_VALUE) == 0) print "none^"; else print "~", (TEXT_TY_Say) GProperty(OBJECT_TY, t_0, article), "~", "^"; } if (t_0 ofclass K1_room) {if (na > 0) { na = 0; print "^"; } print "description: "; if (TEXT_TY_Compare(GProperty(OBJECT_TY, t_0, description), EMPTY_TEXT_VALUE) == 0) print "none^"; else print "~", (TEXT_TY_Say) GProperty(OBJECT_TY, t_0, description), "~", "^"; if (GProperty(OBJECT_TY, t_0, map_region)) { print "map region: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, map_region), "^"; } } if (t_0 ofclass K2_thing) {if (na > 0) { na = 0; print "^"; } print "description: "; if (TEXT_TY_Compare(GProperty(OBJECT_TY, t_0, description), EMPTY_TEXT_VALUE) == 0) print "none^"; else print "~", (TEXT_TY_Say) GProperty(OBJECT_TY, t_0, description), "~", "^"; print "initial appearance: "; if (TEXT_TY_Compare(GProperty(OBJECT_TY, t_0, initial), EMPTY_TEXT_VALUE) == 0) print "none^"; else print "~", (TEXT_TY_Say) GProperty(OBJECT_TY, t_0, initial), "~", "^"; if (GProperty(OBJECT_TY, t_0, with_key)) { print "matching key: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, with_key), "^"; } } if (t_0 ofclass K3_direction) {if (na > 0) { na = 0; print "^"; } if (GProperty(OBJECT_TY, t_0, p10_opposite)) { print "opposite: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, p10_opposite), "^"; } } if (t_0 ofclass K4_door) {if (na > 0) { na = 0; print "^"; } if (GProperty(OBJECT_TY, t_0, door_to)) { print "other side: "; print (PrintShortName) GProperty(OBJECT_TY, t_0, door_to), "^"; } } if (t_0 ofclass K5_container) {if (na > 0) { na = 0; print "^"; } print "carrying capacity: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, capacity), "^"; } if (t_0 ofclass K6_supporter) {if (na > 0) { na = 0; print "^"; } print "carrying capacity: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, capacity), "^"; } if (t_0 ofclass K8_person) {if (na > 0) { na = 0; print "^"; } print "carrying capacity: "; print (DecimalNumber) GProperty(OBJECT_TY, t_0, capacity), "^"; } ]; [ ShowRLocation obj top; if (obj ofclass K1_room) return; print " "; if (parent(obj)) { if (obj has worn) print "worn by "; else { if (parent(obj) has animate) print "carried by "; if (parent(obj) has container) print "in "; if (parent(obj) ofclass K1_room) print "in "; if (parent(obj) has supporter) print "on "; } print (the) parent(obj); ShowRLocation(parent(obj)); } else { if (obj.component_parent) { if (top == false) print ", which is "; print "part of ", (the) obj.component_parent; ShowRLocation(obj.component_parent); } else print "out of play"; } ]; [ ShowMeRecursively obj depth f c i k; spaces(2*depth); if (f && (depth > 0) && (TestScope(obj, player) == false)) { print "*"; c = true; } print (name) obj; if (depth > 0) { if (obj.component_parent) print " (part of ", (name) obj.component_parent, ")"; if (obj has worn) print " (worn)"; } if (obj provides KD_Count) { k = KindHierarchy-->((obj.KD_Count)*2); if ((k ~= K2_thing) || (depth==0)) { print " - "; if (k == K4_door or K5_container) { if (obj has transparent) print "transparent "; if (obj has locked) print "locked "; else if (obj has open) print "open "; else print "closed "; } print (I7_Kind_Name) k; } } print "^"; if (obj.component_child) c = c | ShowMeRecursively(obj.component_child, depth+2, f); if ((depth>0) && (obj.component_sibling)) c = c | ShowMeRecursively(obj.component_sibling, depth, f); if (child(obj)) c = c | ShowMeRecursively(child(obj), depth+2, f); if ((depth>0) && (sibling(obj))) c = c | ShowMeRecursively(sibling(obj), depth, f); return c; ]; [ AllowInShowme pr; if (pr == workflag or concealed or mentioned) rfalse; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Showverb Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ShowVerbSub address lines meta i x; wn = 2; x = NextWordStopped(); if (x == 0 || ((x->#dict_par1) & 1) == 0) "Try typing ~showverb~ and then the name of a verb."; meta = ((x->#dict_par1) & 2)/2; i = DictionaryWordToVerbNum(x); address = VM_CommandTableAddress(i); lines = address->0; address++; print "Verb "; if (meta) print "meta "; VM_PrintCommandWords(i); new_line; if (lines == 0) print "has no grammar lines.^"; for (: lines>0 : lines--) { address = UnpackGrammarLine(address); print " "; DebugGrammarLine(); new_line; } ParaContent(); ]; [ DebugGrammarLine pcount; print " * "; for (: line_token-->pcount ~= ENDIT_TOKEN : pcount++) { if ((line_token-->pcount)->0 & $10) print "/ "; print (DebugToken) line_token-->pcount, " "; } print "-> ", (DebugAction) action_to_be; if (action_reversed) print " reverse"; ]; [ DebugToken token; AnalyseToken(token); switch (found_ttype) { ILLEGAL_TT: print ""; ELEMENTARY_TT: switch (found_tdata) { NOUN_TOKEN: print "noun"; HELD_TOKEN: print "held"; MULTI_TOKEN: print "multi"; MULTIHELD_TOKEN: print "multiheld"; MULTIEXCEPT_TOKEN: print "multiexcept"; MULTIINSIDE_TOKEN: print "multiinside"; CREATURE_TOKEN: print "creature"; SPECIAL_TOKEN: print "special"; NUMBER_TOKEN: print "number"; TOPIC_TOKEN: print "topic"; ENDIT_TOKEN: print "END"; } PREPOSITION_TT: print "'", (address) found_tdata, "'"; ROUTINE_FILTER_TT: print "noun=Routine(", found_tdata, ")"; ATTR_FILTER_TT: print (DebugAttribute) found_tdata; SCOPE_TT: print "scope=Routine(", found_tdata, ")"; GPR_TT: print "Routine(", found_tdata, ")"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Test Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #Iftrue (0 > 0); [ TestScriptSub; switch(special_word) { default: print ">--> The following tests are available:^"; } ]; #ifdef TARGET_GLULX; Constant TEST_STACK_SIZE = 128; #ifnot; Constant TEST_STACK_SIZE = 48; #endif; Array test_stack --> TEST_STACK_SIZE; Global test_sp = 0; [ TestStart T R l k; if (test_sp >= TEST_STACK_SIZE) ">--> Testing too many levels deep"; test_stack-->test_sp = T; test_stack-->(test_sp+1) = 0; test_stack-->(test_sp+3) = l; test_sp = test_sp + 4; if ((R-->0) && (R-->0 ~= real_location)) { print "(first moving to ", (name) R-->0, ")^"; PlayerTo(R-->0, 1); } k=1; while (R-->k) { if (R-->k notin player) { print "(first acquiring ", (the) R-->k, ")^"; move R-->k to player; } k++; } print "(Testing.)^"; say__p = 1; ]; [ TestKeyboardPrimitive a_buffer a_table p i j l spaced ch; if (test_sp == 0) { test_stack-->2 = 1; return VM_ReadKeyboard(a_buffer, a_table); } else { p = test_stack-->(test_sp-4); i = test_stack-->(test_sp-3); l = test_stack-->(test_sp-1); print "["; print test_stack-->2; print "] "; test_stack-->2 = test_stack-->2 + 1; style bold; while ((i < l) && (p->i ~= '/')) { ch = p->i; if (spaced || (ch ~= ' ')) { if ((p->i == '[') && (p->(i+1) == '/') && (p->(i+2) == ']')) { ch = '/'; i = i+2; } a_buffer->(j+WORDSIZE) = ch; print (char) ch; i++; j++; spaced = true; } else i++; } style roman; print "^"; #ifdef TARGET_ZCODE; a_buffer->1 = j; #ifnot; ! TARGET_GLULX a_buffer-->0 = j; #endif; VM_Tokenise(a_buffer, a_table); if (p->i == '/') i++; if (i >= l) { test_sp = test_sp - 4; } else test_stack-->(test_sp-3) = i; } ]; #IFNOT; [ TestScriptSub; ">--> No test scripts exist for this game."; ]; #ENDIF; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Trace Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TraceOnSub; parser_trace=1; say__p = 1; "[Trace on.]"; ]; [ TraceLevelSub; parser_trace = parsed_number; say__p = 1; print "[Parser tracing set to level ", parser_trace, ".]^"; ]; [ TraceOffSub; parser_trace=0; say__p = 1; "Trace off."; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Tree Command ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ XTreeSub i; if (noun == 0) { objectloop (i) if (i ofclass Object && parent(i) == 0) XObj(i); } else XObj(noun,1); ]; [ XObj obj f; if (parent(obj) == 0) print (name) obj; else print (a) obj; print " (", obj, ") "; if (f == 1 && parent(obj) ~= 0) print "(in ", (name) parent(obj), " ", parent(obj), ")"; new_line; if (child(obj) == 0) rtrue; if (obj == Class) WriteListFrom(child(obj), NEWLINE_BIT+INDENT_BIT+ALWAYS_BIT+NOARTICLE_BIT, 1); else WriteListFrom(child(obj), NEWLINE_BIT+INDENT_BIT+ALWAYS_BIT+FULLINV_BIT, 1); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Tests.i6t: Grammar ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ testcommandnoun obj o2; switch (scope_stage) { 1: rtrue; ! allow multiple objects 2: objectloop (obj) if ((obj ofclass Object) && (obj provides KD_Count)) PlaceInScope(obj, true); 3: print "There seems to be no such object anywhere in the model world.^"; } ]; Verb meta 'abstract' * scope=testcommandnoun 'to' scope=testcommandnoun -> XAbstract; Verb meta 'actions' * -> ActionsOn * 'on' -> ActionsOn * 'off' -> ActionsOff; Verb meta 'gonear' * scope=testcommandnoun -> Gonear; Verb meta 'purloin' * scope=testcommandnoun -> XPurloin; Verb meta 'random' * -> Predictable; Verb meta 'relations' * -> ShowRelations; Verb meta 'responses' * -> ShowResponses * special -> ShowResponses * 'now' special -> ShowResponses * 'set' special -> ShowResponses; Verb meta 'rules' * -> RulesOn * 'all' -> RulesAll * 'on' -> RulesOn * 'off' -> RulesOff; Verb meta 'scenes' * -> ScenesOn * 'on' -> ScenesOn * 'off' -> ScenesOff; Verb meta 'scope' * -> Scope * scope=testcommandnoun -> Scope; Verb meta 'showheap' * -> ShowHeap; Verb meta 'showme' * -> ShowMe * scope=testcommandnoun -> ShowMe; Verb meta 'showverb' * special -> Showverb; Verb meta 'test' * -> TestScript * special -> TestScript; Verb meta 'trace' * -> TraceOn * number -> TraceLevel * 'on' -> TraceOn * 'off' -> TraceOff; Verb meta 'tree' * -> XTree * scope=testcommandnoun -> XTree; [ InternalTestCases ; ]; #ENDIF; ! DEBUG ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: I6 Inclusions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! "Include (- ... -)" inclusions with no specified position appear here. [ CheckDPMR result sinp1 sinp2 rv; sinp1 = inp1; sinp2 = inp2; inp1 = noun; inp2 = second; rv = FollowRulebook( 25 ); inp1 = sinp1; inp2 = sinp2; if ((rv) && RulebookSucceeded()) { result = ResultOfRule(); if (result == RBNO_6 ) return 4; if (result == RBNO_7 ) return 3; if (result == RBNO_8 ) return 2; if (result == RBNO_9 ) return 1; if (result == RBNO_10 ) return 0; } return 2; ]; [ LITTLE_USED_DO_NOTHING_R; rfalse; ]; ! Wait for a safe non navigating key. The user might press Down/PgDn or use the mouse scroll wheel to scroll a page of text, so we will stop those key codes from continuing. [ KeyPause key; while ( 1 ) { key = VM_KeyChar(); #Ifdef TARGET_ZCODE; if ( key == 63 or 129 or 130 or 132 ) { continue; } #Ifnot; ! TARGET_GLULX if ( key == -4 or -5 or -10 or -11 or -12 or -13 ) { continue; } #Endif; ! TARGET_ rfalse; } ]; [ SPACEPause i; while (i ~= 13 or 31 or 32) { i = VM_KeyChar(); } ]; ! No longer used but included just in case [ GetKey; return VM_KeyChar(); ]; [ CenterPrint str depth i j len; font off; i = VM_ScreenWidth(); len = TEXT_TY_CharacterLength(str); if (len > 63) len = 63; j = (i-len)/2 - 1; VM_MoveCursorInStatusLine(depth, j); print (I7_string) str; font on; ]; [ CenterPrintComplex str i j len; font off; print "^"; i = VM_ScreenWidth(); len = TEXT_TY_CharacterLength(str); if (len > 63) len = 63; j = (i-len)/2 - 1; spaces j; print (I7_string) str; font on; ]; [ I7ScreenHeight i screen_height; i = 0->32; if (screen_height == 0 or 255) screen_height = 18; screen_height = screen_height - 7; return screen_height; ]; [ DeepStatus depth i screen_width; VM_StatusLineHeight(depth); screen_width = VM_ScreenWidth(); #ifdef TARGET_GLULX; VM_ClearScreen(1); #ifnot; style reverse; for (i=1:i11); o = screen_width - n; VM_MoveCursorInStatusLine(depth, o); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Entries in constant lists ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: To Phrases ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! From the Standard Rules ! Request 0: phrase (object, number) -> nothing ! To set the/-- locale priority of ( O - an object ) to ( N - a number ): [ PHR_82_r0 t_0 ! Call parameter 'O': object t_1 ! Call parameter 'N': number ct_0 ! currently selected table ct_1 ! currently selected row ; ! [2: if o is a thing] if (((t_0 ofclass K2_thing))) {! [3: if n <= 0] if (((t_1 <= 0))) {! [4: now o is mentioned] (Adj_69_t2_v10(t_0)); } ! [5: if there is a notable-object of o in the table of locale priorities] if (((ExistsTableLookUpCorr(T1_locale_priorities,105,105,t_0)))) {! [6: choose row with a notable-object of o in the table of locale priorities] ct_0 = T1_locale_priorities; ct_1 = TableRowCorr(ct_0, 105, t_0); ! [7: if n <= 0] if (((t_1 <= 0))) {! [8: blank out the whole row] TableBlankOutRow(ct_0, ct_1); } else { ! [9: now the locale description priority entry is n] TableLookUpEntry(ct_0,106,ct_1,1,t_1); } } else { ! [10: if n is greater than 0] if (((t_1 > 0))) {! [11: choose a blank row in the table of locale priorities] ct_0 = T1_locale_priorities; ct_1 = TableBlankRow(ct_0); ! [12: now the notable-object entry is o] TableLookUpEntry(ct_0,105,ct_1,1,t_0); ! [13: now the locale description priority entry is n] TableLookUpEntry(ct_0,106,ct_1,1,t_1); } } } rfalse; ]; ! From the Standard Rules ! Request 1: phrase object -> nothing ! To describe locale for ( O - object ): [ PHR_81_r1 t_0 ! Call parameter 'O': object ; ! [2: carry out the printing the locale description activity with o] CarryOutActivity(V30_printing_the_locale_desc, t_0); rfalse; ]; ! From "Locksmith" by Emily Short ! Request 2: phrase object -> nothing ! To say key-refusal for ( locked-thing - an object ): [ PHR_826_r2 t_0 ! Call parameter 'locked-thing': object ; ! [2: carry out the refusing keys activity with the locked-thing] CarryOutActivity(V35_refusing_keys, t_0); rfalse; ]; ! From the Standard Rules ! Request 3: phrase nothing -> nothing ! To say no line break -- running on ( documented at phs_nolinebreak ): [ PHR_350_r3 ; ! [2: do nothing] ; rfalse; ]; ! From the Standard Rules ! Request 4: phrase response -> nothing ! To say text of ( R - response ) ( documented at phs_response ): [ PHR_390_r4 t_0 ! Call parameter 'R': response ; ! [2: carry out the issuing the response text activity with r] CarryOutActivity(V33_issuing_the_response_tex, t_0); rfalse; ]; ! From the Standard Rules ! Request 5: phrase real number -> real number ! To decide which real number is the real square of ( R - a real number ) ( this is the rsqr function inverse to root ): [ PHR_424_r5 t_0 ! Call parameter 'R': real number tmp_0 ! Let/loop value, e.g., 'x': real number ; ! [2: let x be given by x = r@@94@{32} where x is a real number] ! Solving Q0_english for '$w' (tmp_0 = (REAL_NUMBER_TY_Pow(t_0, NUMBER_TY_to_REAL_NUMBER_TY(2)))); ; ! [3: decide on x] return tmp_0; return 0; ]; ! From the Standard Rules ! Request 6: phrase real number -> real number ! To decide which real number is the hyperbolic arcsine of ( R - a real number ) ( documented at ph_hyperbolicarcsine ) ( this is the arcsinh function inverse to sinh ): [ PHR_442_r6 t_0 ! Call parameter 'R': real number tmp_0 ! Let/loop value, e.g., 'x': real number ; ! [2: let x be given by x = log ( r + root ( r@@94@{32} + 1 ) ) where x is a real number] ! Solving Q1_english for '$w' (tmp_0 = (REAL_NUMBER_TY_Log((REAL_NUMBER_TY_Plus(t_0, (REAL_NUMBER_TY_Root((REAL_NUMBER_TY_Plus((REAL_NUMBER_TY_Pow(t_0, NUMBER_TY_to_REAL_NUMBER_TY(2))), NUMBER_TY_to_REAL_NUMBER_TY(1)))))))))); ; ! [3: decide on x] return tmp_0; return 0; ]; ! From the Standard Rules ! Request 7: phrase real number -> real number ! To decide which real number is the hyperbolic arccosine of ( R - a real number ) ( documented at ph_hyperbolicarccosine ) ( this is the arccosh function inverse to cosh ): [ PHR_443_r7 t_0 ! Call parameter 'R': real number tmp_0 ! Let/loop value, e.g., 'x': real number ; ! [2: let x be given by x = log ( r + root ( r@@94@{32} - 1 ) ) where x is a real number] ! Solving Q2_english for '$w' (tmp_0 = (REAL_NUMBER_TY_Log((REAL_NUMBER_TY_Plus(t_0, (REAL_NUMBER_TY_Root((REAL_NUMBER_TY_Minus((REAL_NUMBER_TY_Pow(t_0, NUMBER_TY_to_REAL_NUMBER_TY(2))), NUMBER_TY_to_REAL_NUMBER_TY(1)))))))))); ; ! [3: decide on x] return tmp_0; return 0; ]; ! From the Standard Rules ! Request 8: phrase real number -> real number ! To decide which real number is the hyperbolic arctangent of ( R - a real number ) ( documented at ph_hyperbolicarctangent ) ( this is the arctanh function inverse to tanh ): [ PHR_444_r8 t_0 ! Call parameter 'R': real number tmp_0 ! Let/loop value, e.g., 'x': real number ; ! [2: let x be given by x = 0.5* ( log ( 1+r ) - log ( 1-r ) ) where x is a real number] ! Solving Q3_english for '$w' (tmp_0 = (REAL_NUMBER_TY_Times(1056964608, (REAL_NUMBER_TY_Minus((REAL_NUMBER_TY_Log((REAL_NUMBER_TY_Plus(NUMBER_TY_to_REAL_NUMBER_TY(1), t_0)))), (REAL_NUMBER_TY_Log((REAL_NUMBER_TY_Minus(NUMBER_TY_to_REAL_NUMBER_TY(1), t_0))))))))); ; ! [3: decide on x] return tmp_0; return 0; ]; ! From the Standard Rules ! Request 9: phrase nothing -> nothing ! To say here ( documented at phs_here ): [ PHR_527_r9 ; ! [2: say ~[if story tense is present tense]here[otherwise]there~] say__p=1;! [3: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say407;! [4: ~here~] ParaContent(); print "here";! [5: otherwise] jump L_SayX407; .L_Say407;! [6: ~there~] ParaContent(); print "there"; .L_Say408; .L_SayX407;rfalse; ]; ! From the Standard Rules ! Request 10: phrase nothing -> nothing ! To say now ( documented at phs_now ): [ PHR_528_r10 ; ! [2: say ~[if story tense is present tense]now[otherwise]then~] say__p=1;! [3: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say409;! [4: ~now~] ParaContent(); print "now";! [5: otherwise] jump L_SayX408; .L_Say409;! [6: ~then~] ParaContent(); print "then"; .L_Say410; .L_SayX408;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 11: phrase nothing -> nothing ! To say we: [ PHR_763_r11 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~I~] say__p=1;! [5: ~I~] ParaContent(); print "I"; .L_Say411; .L_SayX409;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~you~] say__p=1;! [8: ~you~] ParaContent(); print "you"; .L_Say412; .L_SayX410;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~he~] say__p=1;! [12: ~he~] ParaContent(); print "he"; .L_Say413; .L_SayX411;} else { ! [13: say ~she~] say__p=1;! [14: ~she~] ParaContent(); print "she"; .L_Say414; .L_SayX412;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~we~] say__p=1;! [17: ~we~] ParaContent(); print "we"; .L_Say415; .L_SayX413;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~you~] say__p=1;! [20: ~you~] ParaContent(); print "you"; .L_Say416; .L_SayX414;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~they~] say__p=1;! [23: ~they~] ParaContent(); print "they"; .L_Say417; .L_SayX415;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 12: phrase nothing -> nothing ! To say us: [ PHR_764_r12 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~me~] say__p=1;! [5: ~me~] ParaContent(); print "me"; .L_Say418; .L_SayX416;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~you~] say__p=1;! [8: ~you~] ParaContent(); print "you"; .L_Say419; .L_SayX417;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~him~] say__p=1;! [12: ~him~] ParaContent(); print "him"; .L_Say420; .L_SayX418;} else { ! [13: say ~her~] say__p=1;! [14: ~her~] ParaContent(); print "her"; .L_Say421; .L_SayX419;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~us~] say__p=1;! [17: ~us~] ParaContent(); print "us"; .L_Say422; .L_SayX420;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~you~] say__p=1;! [20: ~you~] ParaContent(); print "you"; .L_Say423; .L_SayX421;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~them~] say__p=1;! [23: ~them~] ParaContent(); print "them"; .L_Say424; .L_SayX422;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 13: phrase nothing -> nothing ! To say ours: [ PHR_765_r13 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~mine~] say__p=1;! [5: ~mine~] ParaContent(); print "mine"; .L_Say425; .L_SayX423;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~yours~] say__p=1;! [8: ~yours~] ParaContent(); print "yours"; .L_Say426; .L_SayX424;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~his~] say__p=1;! [12: ~his~] ParaContent(); print "his"; .L_Say427; .L_SayX425;} else { ! [13: say ~hers~] say__p=1;! [14: ~hers~] ParaContent(); print "hers"; .L_Say428; .L_SayX426;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~ours~] say__p=1;! [17: ~ours~] ParaContent(); print "ours"; .L_Say429; .L_SayX427;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~yours~] say__p=1;! [20: ~yours~] ParaContent(); print "yours"; .L_Say430; .L_SayX428;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~theirs~] say__p=1;! [23: ~theirs~] ParaContent(); print "theirs"; .L_Say431; .L_SayX429;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 14: phrase nothing -> nothing ! To say ourselves: [ PHR_766_r14 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~myself~] say__p=1;! [5: ~myself~] ParaContent(); print "myself"; .L_Say432; .L_SayX430;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~yourself~] say__p=1;! [8: ~yourself~] ParaContent(); print "yourself"; .L_Say433; .L_SayX431;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~himself~] say__p=1;! [12: ~himself~] ParaContent(); print "himself"; .L_Say434; .L_SayX432;} else { ! [13: say ~herself~] say__p=1;! [14: ~herself~] ParaContent(); print "herself"; .L_Say435; .L_SayX433;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~ourselves~] say__p=1;! [17: ~ourselves~] ParaContent(); print "ourselves"; .L_Say436; .L_SayX434;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~yourselves~] say__p=1;! [20: ~yourselves~] ParaContent(); print "yourselves"; .L_Say437; .L_SayX435;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~themselves~] say__p=1;! [23: ~themselves~] ParaContent(); print "themselves"; .L_Say438; .L_SayX436;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 15: phrase nothing -> nothing ! To say our: [ PHR_767_r15 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~my~] say__p=1;! [5: ~my~] ParaContent(); print "my"; .L_Say439; .L_SayX437;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~your~] say__p=1;! [8: ~your~] ParaContent(); print "your"; .L_Say440; .L_SayX438;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~his~] say__p=1;! [12: ~his~] ParaContent(); print "his"; .L_Say441; .L_SayX439;} else { ! [13: say ~her~] say__p=1;! [14: ~her~] ParaContent(); print "her"; .L_Say442; .L_SayX440;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~our~] say__p=1;! [17: ~our~] ParaContent(); print "our"; .L_Say443; .L_SayX441;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~your~] say__p=1;! [20: ~your~] ParaContent(); print "your"; .L_Say444; .L_SayX442;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~their~] say__p=1;! [23: ~their~] ParaContent(); print "their"; .L_Say445; .L_SayX443;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 16: phrase nothing -> nothing ! To say We: [ PHR_768_r16 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~I~] say__p=1;! [5: ~I~] ParaContent(); print "I"; .L_Say446; .L_SayX444;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~You~] say__p=1;! [8: ~You~] ParaContent(); print "You"; .L_Say447; .L_SayX445;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~He~] say__p=1;! [12: ~He~] ParaContent(); print "He"; .L_Say448; .L_SayX446;} else { ! [13: say ~She~] say__p=1;! [14: ~She~] ParaContent(); print "She"; .L_Say449; .L_SayX447;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~We~] say__p=1;! [17: ~We~] ParaContent(); print "We"; .L_Say450; .L_SayX448;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~You~] say__p=1;! [20: ~You~] ParaContent(); print "You"; .L_Say451; .L_SayX449;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~They~] say__p=1;! [23: ~They~] ParaContent(); print "They"; .L_Say452; .L_SayX450;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 17: phrase nothing -> nothing ! To say Us: [ PHR_769_r17 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~Me~] say__p=1;! [5: ~Me~] ParaContent(); print "Me"; .L_Say453; .L_SayX451;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~You~] say__p=1;! [8: ~You~] ParaContent(); print "You"; .L_Say454; .L_SayX452;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~Him~] say__p=1;! [12: ~Him~] ParaContent(); print "Him"; .L_Say455; .L_SayX453;} else { ! [13: say ~Her~] say__p=1;! [14: ~Her~] ParaContent(); print "Her"; .L_Say456; .L_SayX454;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~Us~] say__p=1;! [17: ~Us~] ParaContent(); print "Us"; .L_Say457; .L_SayX455;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~You~] say__p=1;! [20: ~You~] ParaContent(); print "You"; .L_Say458; .L_SayX456;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~Them~] say__p=1;! [23: ~Them~] ParaContent(); print "Them"; .L_Say459; .L_SayX457;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 18: phrase nothing -> nothing ! To say Ours: [ PHR_770_r18 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~Mine~] say__p=1;! [5: ~Mine~] ParaContent(); print "Mine"; .L_Say460; .L_SayX458;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~Yours~] say__p=1;! [8: ~Yours~] ParaContent(); print "Yours"; .L_Say461; .L_SayX459;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~His~] say__p=1;! [12: ~His~] ParaContent(); print "His"; .L_Say462; .L_SayX460;} else { ! [13: say ~Hers~] say__p=1;! [14: ~Hers~] ParaContent(); print "Hers"; .L_Say463; .L_SayX461;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~Ours~] say__p=1;! [17: ~Ours~] ParaContent(); print "Ours"; .L_Say464; .L_SayX462;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~Yours~] say__p=1;! [20: ~Yours~] ParaContent(); print "Yours"; .L_Say465; .L_SayX463;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~Theirs~] say__p=1;! [23: ~Theirs~] ParaContent(); print "Theirs"; .L_Say466; .L_SayX464;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 19: phrase nothing -> nothing ! To say Ourselves: [ PHR_771_r19 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~Myself~] say__p=1;! [5: ~Myself~] ParaContent(); print "Myself"; .L_Say467; .L_SayX465;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~Yourself~] say__p=1;! [8: ~Yourself~] ParaContent(); print "Yourself"; .L_Say468; .L_SayX466;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~Himself~] say__p=1;! [12: ~Himself~] ParaContent(); print "Himself"; .L_Say469; .L_SayX467;} else { ! [13: say ~Herself~] say__p=1;! [14: ~Herself~] ParaContent(); print "Herself"; .L_Say470; .L_SayX468;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~Ourselves~] say__p=1;! [17: ~Ourselves~] ParaContent(); print "Ourselves"; .L_Say471; .L_SayX469;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~Yourselves~] say__p=1;! [20: ~Yourselves~] ParaContent(); print "Yourselves"; .L_Say472; .L_SayX470;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~Themselves~] say__p=1;! [23: ~Themselves~] ParaContent(); print "Themselves"; .L_Say473; .L_SayX471;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 20: phrase nothing -> nothing ! To say Our: [ PHR_772_r20 ; ! [2: now the prior named object is the player] prior_named_noun = player; ! [3: if the story viewpoint is first person singular] if (((story_viewpoint == I112_first_person_singular))) {! [4: say ~My~] say__p=1;! [5: ~My~] ParaContent(); print "My"; .L_Say474; .L_SayX472;} ! [6: if the story viewpoint is second person singular] if (((story_viewpoint == I113_second_person_singular))) {! [7: say ~Your~] say__p=1;! [8: ~Your~] ParaContent(); print "Your"; .L_Say475; .L_SayX473;} ! [9: if the story viewpoint is third person singular] if (((story_viewpoint == I114_third_person_singular))) {! [10: if the player is male] if ((((Adj_82_t1_v10(player))))) {! [11: say ~His~] say__p=1;! [12: ~His~] ParaContent(); print "His"; .L_Say476; .L_SayX474;} else { ! [13: say ~Her~] say__p=1;! [14: ~Her~] ParaContent(); print "Her"; .L_Say477; .L_SayX475;} } ! [15: if the story viewpoint is first person plural] if (((story_viewpoint == I115_first_person_plural))) {! [16: say ~Our~] say__p=1;! [17: ~Our~] ParaContent(); print "Our"; .L_Say478; .L_SayX476;} ! [18: if the story viewpoint is second person plural] if (((story_viewpoint == I116_second_person_plural))) {! [19: say ~Your~] say__p=1;! [20: ~Your~] ParaContent(); print "Your"; .L_Say479; .L_SayX477;} ! [21: if the story viewpoint is third person plural] if (((story_viewpoint == I117_third_person_plural))) {! [22: say ~Their~] say__p=1;! [23: ~Their~] ParaContent(); print "Their"; .L_Say480; .L_SayX478;} rfalse; ]; ! From "English Language" by Graham Nelson ! Request 21: phrase nothing -> nothing ! To say those: [ PHR_773_r21 ; ! [2: say those in the accusative] say__p=1;! [3: those in the accusative] ParaContent(); (PHR_775_r23 (I120_accusative)); .L_Say481; .L_SayX479;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 22: phrase nothing -> nothing ! To say Those: [ PHR_774_r22 ; ! [2: say those in the nominative] say__p=1;! [3: those in the nominative] ParaContent(); (PHR_776_r24 (I119_nominative)); .L_Say482; .L_SayX480;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 23: phrase grammatical case -> nothing ! To say those in ( case - grammatical case ): [ PHR_775_r23 t_0 ! Call parameter 'case': grammatical case tmp_0 ! Let/loop value (deallocated by end of phrase) ; ! [2: if the case is nominative] if (((t_0 == I119_nominative))) {! [3: let the item be the prior named object] tmp_0 = prior_named_noun; ! [4: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [5: say ~those~] say__p=1;! [6: ~those~] ParaContent(); print "those"; .L_Say483; .L_SayX481;} else { ! [7: if the item is the player] if (((tmp_0 == player))) {! [8: say ~[we]~] say__p=1;! [9: we] ParaContent(); (PHR_763_r11 ()); .L_Say484; .L_SayX482;} else { ! [10: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [11: say ~he~] say__p=1;! [12: ~he~] ParaContent(); print "he"; .L_Say485; .L_SayX483;} else { ! [13: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [14: say ~she~] say__p=1;! [15: ~she~] ParaContent(); print "she"; .L_Say486; .L_SayX484;} else { ! [16: say ~that~] say__p=1;! [17: ~that~] ParaContent(); print "that"; .L_Say487; .L_SayX485;} } } } } else { ! [18: let the item be the prior named object] tmp_0 = prior_named_noun; ! [19: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [20: say ~those~] say__p=1;! [21: ~those~] ParaContent(); print "those"; .L_Say488; .L_SayX486;} else { ! [22: if the item is the player] if (((tmp_0 == player))) {! [23: say ~[we]~] say__p=1;! [24: we] ParaContent(); (PHR_763_r11 ()); .L_Say489; .L_SayX487;} else { ! [25: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [26: say ~him~] say__p=1;! [27: ~him~] ParaContent(); print "him"; .L_Say490; .L_SayX488;} else { ! [28: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [29: say ~her~] say__p=1;! [30: ~her~] ParaContent(); print "her"; .L_Say491; .L_SayX489;} else { ! [31: say ~that~] say__p=1;! [32: ~that~] ParaContent(); print "that"; .L_Say492; .L_SayX490;} } } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 24: phrase grammatical case -> nothing ! To say Those in ( case - grammatical case ): [ PHR_776_r24 t_0 ! Call parameter 'case': grammatical case tmp_0 ! Let/loop value (deallocated by end of phrase) ; ! [2: if the case is nominative] if (((t_0 == I119_nominative))) {! [3: let the item be the prior named object] tmp_0 = prior_named_noun; ! [4: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [5: say ~Those~] say__p=1;! [6: ~Those~] ParaContent(); print "Those"; .L_Say493; .L_SayX491;} else { ! [7: if the item is the player] if (((tmp_0 == player))) {! [8: say ~[We]~] say__p=1;! [9: we] ParaContent(); (PHR_768_r16 ()); .L_Say494; .L_SayX492;} else { ! [10: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [11: say ~He~] say__p=1;! [12: ~He~] ParaContent(); print "He"; .L_Say495; .L_SayX493;} else { ! [13: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [14: say ~She~] say__p=1;! [15: ~She~] ParaContent(); print "She"; .L_Say496; .L_SayX494;} else { ! [16: say ~That~] say__p=1;! [17: ~That~] ParaContent(); print "That"; .L_Say497; .L_SayX495;} } } } } else { ! [18: let the item be the prior named object] tmp_0 = prior_named_noun; ! [19: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [20: say ~Those~] say__p=1;! [21: ~Those~] ParaContent(); print "Those"; .L_Say498; .L_SayX496;} else { ! [22: if the item is the player] if (((tmp_0 == player))) {! [23: say ~[We]~] say__p=1;! [24: we] ParaContent(); (PHR_768_r16 ()); .L_Say499; .L_SayX497;} else { ! [25: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [26: say ~Him~] say__p=1;! [27: ~Him~] ParaContent(); print "Him"; .L_Say500; .L_SayX498;} else { ! [28: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [29: say ~Her~] say__p=1;! [30: ~Her~] ParaContent(); print "Her"; .L_Say501; .L_SayX499;} else { ! [31: say ~That~] say__p=1;! [32: ~That~] ParaContent(); print "That"; .L_Say502; .L_SayX500;} } } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 25: phrase nothing -> nothing ! To say they: [ PHR_777_r25 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~they~] say__p=1;! [5: ~they~] ParaContent(); print "they"; .L_Say503; .L_SayX501;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[we]~] say__p=1;! [8: we] ParaContent(); (PHR_763_r11 ()); .L_Say504; .L_SayX502;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~he~] say__p=1;! [11: ~he~] ParaContent(); print "he"; .L_Say505; .L_SayX503;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~she~] say__p=1;! [14: ~she~] ParaContent(); print "she"; .L_Say506; .L_SayX504;} else { ! [15: say ~it~] say__p=1;! [16: ~it~] ParaContent(); print "it"; .L_Say507; .L_SayX505;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 26: phrase nothing -> nothing ! To say They: [ PHR_778_r26 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~They~] say__p=1;! [5: ~They~] ParaContent(); print "They"; .L_Say508; .L_SayX506;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[We]~] say__p=1;! [8: we] ParaContent(); (PHR_768_r16 ()); .L_Say509; .L_SayX507;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~He~] say__p=1;! [11: ~He~] ParaContent(); print "He"; .L_Say510; .L_SayX508;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~She~] say__p=1;! [14: ~She~] ParaContent(); print "She"; .L_Say511; .L_SayX509;} else { ! [15: say ~It~] say__p=1;! [16: ~It~] ParaContent(); print "It"; .L_Say512; .L_SayX510;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 27: phrase nothing -> nothing ! To say their: [ PHR_779_r27 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~their~] say__p=1;! [5: ~their~] ParaContent(); print "their"; .L_Say513; .L_SayX511;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[our]~] say__p=1;! [8: our] ParaContent(); (PHR_767_r15 ()); .L_Say514; .L_SayX512;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~his~] say__p=1;! [11: ~his~] ParaContent(); print "his"; .L_Say515; .L_SayX513;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~her~] say__p=1;! [14: ~her~] ParaContent(); print "her"; .L_Say516; .L_SayX514;} else { ! [15: say ~its~] say__p=1;! [16: ~its~] ParaContent(); print "its"; .L_Say517; .L_SayX515;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 28: phrase nothing -> nothing ! To say Their: [ PHR_780_r28 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~Their~] say__p=1;! [5: ~Their~] ParaContent(); print "Their"; .L_Say518; .L_SayX516;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[Our]~] say__p=1;! [8: our] ParaContent(); (PHR_772_r20 ()); .L_Say519; .L_SayX517;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~His~] say__p=1;! [11: ~His~] ParaContent(); print "His"; .L_Say520; .L_SayX518;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~Her~] say__p=1;! [14: ~Her~] ParaContent(); print "Her"; .L_Say521; .L_SayX519;} else { ! [15: say ~Its~] say__p=1;! [16: ~Its~] ParaContent(); print "Its"; .L_Say522; .L_SayX520;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 29: phrase nothing -> nothing ! To say them: [ PHR_781_r29 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~them~] say__p=1;! [5: ~them~] ParaContent(); print "them"; .L_Say523; .L_SayX521;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[us]~] say__p=1;! [8: us] ParaContent(); (PHR_764_r12 ()); .L_Say524; .L_SayX522;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~him~] say__p=1;! [11: ~him~] ParaContent(); print "him"; .L_Say525; .L_SayX523;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~her~] say__p=1;! [14: ~her~] ParaContent(); print "her"; .L_Say526; .L_SayX524;} else { ! [15: say ~it~] say__p=1;! [16: ~it~] ParaContent(); print "it"; .L_Say527; .L_SayX525;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 30: phrase nothing -> nothing ! To say Them: [ PHR_782_r30 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~Them~] say__p=1;! [5: ~Them~] ParaContent(); print "Them"; .L_Say528; .L_SayX526;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[Us]~] say__p=1;! [8: us] ParaContent(); (PHR_769_r17 ()); .L_Say529; .L_SayX527;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~Him~] say__p=1;! [11: ~Him~] ParaContent(); print "Him"; .L_Say530; .L_SayX528;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~Her~] say__p=1;! [14: ~Her~] ParaContent(); print "Her"; .L_Say531; .L_SayX529;} else { ! [15: say ~It~] say__p=1;! [16: ~It~] ParaContent(); print "It"; .L_Say532; .L_SayX530;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 31: phrase nothing -> nothing ! To say theirs: [ PHR_783_r31 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~theirs~] say__p=1;! [5: ~theirs~] ParaContent(); print "theirs"; .L_Say533; .L_SayX531;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[ours]~] say__p=1;! [8: ours] ParaContent(); (PHR_765_r13 ()); .L_Say534; .L_SayX532;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~his~] say__p=1;! [11: ~his~] ParaContent(); print "his"; .L_Say535; .L_SayX533;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~hers~] say__p=1;! [14: ~hers~] ParaContent(); print "hers"; .L_Say536; .L_SayX534;} else { ! [15: say ~its~] say__p=1;! [16: ~its~] ParaContent(); print "its"; .L_Say537; .L_SayX535;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 32: phrase nothing -> nothing ! To say Theirs: [ PHR_784_r32 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~Theirs~] say__p=1;! [5: ~Theirs~] ParaContent(); print "Theirs"; .L_Say538; .L_SayX536;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[Ours]~] say__p=1;! [8: ours] ParaContent(); (PHR_770_r18 ()); .L_Say539; .L_SayX537;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~His~] say__p=1;! [11: ~His~] ParaContent(); print "His"; .L_Say540; .L_SayX538;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~Hers~] say__p=1;! [14: ~Hers~] ParaContent(); print "Hers"; .L_Say541; .L_SayX539;} else { ! [15: say ~Its~] say__p=1;! [16: ~Its~] ParaContent(); print "Its"; .L_Say542; .L_SayX540;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 33: phrase nothing -> nothing ! To say themselves: [ PHR_785_r33 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~themselves~] say__p=1;! [5: ~themselves~] ParaContent(); print "themselves"; .L_Say543; .L_SayX541;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[ourselves]~] say__p=1;! [8: ourselves] ParaContent(); (PHR_766_r14 ()); .L_Say544; .L_SayX542;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~himself~] say__p=1;! [11: ~himself~] ParaContent(); print "himself"; .L_Say545; .L_SayX543;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~herself~] say__p=1;! [14: ~herself~] ParaContent(); print "herself"; .L_Say546; .L_SayX544;} else { ! [15: say ~itself~] say__p=1;! [16: ~itself~] ParaContent(); print "itself"; .L_Say547; .L_SayX545;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 34: phrase nothing -> nothing ! To say Themselves: [ PHR_786_r34 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~Themselves~] say__p=1;! [5: ~Themselves~] ParaContent(); print "Themselves"; .L_Say548; .L_SayX546;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[Ourselves]~] say__p=1;! [8: ourselves] ParaContent(); (PHR_771_r19 ()); .L_Say549; .L_SayX547;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~Himself~] say__p=1;! [11: ~Himself~] ParaContent(); print "Himself"; .L_Say550; .L_SayX548;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~Herself~] say__p=1;! [14: ~Herself~] ParaContent(); print "Herself"; .L_Say551; .L_SayX549;} else { ! [15: say ~Itself~] say__p=1;! [16: ~Itself~] ParaContent(); print "Itself"; .L_Say552; .L_SayX550;} } } } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 35: phrase nothing -> nothing ! To say they're: [ PHR_787_r35 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~they~] say__p=1;! [5: ~they~] ParaContent(); print "they"; .L_Say553; .L_SayX551;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[we]~] say__p=1;! [8: we] ParaContent(); (PHR_763_r11 ()); .L_Say554; .L_SayX552;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~he~] say__p=1;! [11: ~he~] ParaContent(); print "he"; .L_Say555; .L_SayX553;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~she~] say__p=1;! [14: ~she~] ParaContent(); print "she"; .L_Say556; .L_SayX554;} else { ! [15: say ~that~] say__p=1;! [16: ~that~] ParaContent(); print "that"; .L_Say557; .L_SayX555;} } } } ! [17: say ~['re]~] say__p=1;! [18: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say558; .L_SayX556;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 36: phrase nothing -> nothing ! To say They're: [ PHR_788_r36 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [4: say ~They~] say__p=1;! [5: ~They~] ParaContent(); print "They"; .L_Say559; .L_SayX557;} else { ! [6: if the item is the player] if (((tmp_0 == player))) {! [7: say ~[We]~] say__p=1;! [8: we] ParaContent(); (PHR_768_r16 ()); .L_Say560; .L_SayX558;} else { ! [9: if the item is a male person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_82_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [10: say ~He~] say__p=1;! [11: ~He~] ParaContent(); print "He"; .L_Say561; .L_SayX559;} else { ! [12: if the item is a female person and item is not neuter] if ((((tmp_0 ofclass K8_person) && ((Adj_81_t1_v10(tmp_0))))) && (((~~(((Adj_83_t1_v10(tmp_0)))))))) {! [13: say ~She~] say__p=1;! [14: ~She~] ParaContent(); print "She"; .L_Say562; .L_SayX560;} else { ! [15: say ~That~] say__p=1;! [16: ~That~] ParaContent(); print "That"; .L_Say563; .L_SayX561;} } } } ! [17: say ~['re]~] say__p=1;! [18: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say564; .L_SayX562;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 37: phrase nothing -> nothing ! To say It: [ PHR_789_r37 ; ! [2: say ~[regarding nothing]It~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~It~] ParaContent(); print "It"; .L_Say565; .L_SayX563;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 38: phrase nothing -> nothing ! To say There: [ PHR_790_r38 ; ! [2: say ~[regarding nothing]There~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~There~] ParaContent(); print "There"; .L_Say566; .L_SayX564;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 39: phrase nothing -> nothing ! To say it: [ PHR_791_r39 ; ! [2: say ~[regarding nothing]it~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~it~] ParaContent(); print "it"; .L_Say567; .L_SayX565;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 40: phrase nothing -> nothing ! To say there: [ PHR_792_r40 ; ! [2: say ~[regarding nothing]there~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~there~] ParaContent(); print "there"; .L_Say568; .L_SayX566;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 41: phrase nothing -> nothing ! To say It's: [ PHR_793_r41 ; ! [2: say ~[regarding nothing]It['re]~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~It~] ParaContent(); print "It";! [5: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say569; .L_SayX567;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 42: phrase nothing -> nothing ! To say There's: [ PHR_794_r42 ; ! [2: say ~[regarding nothing]There['re]~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~There~] ParaContent(); print "There";! [5: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say570; .L_SayX568;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 43: phrase nothing -> nothing ! To say it's: [ PHR_795_r43 ; ! [2: say ~[regarding nothing]it['re]~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~it~] ParaContent(); print "it";! [5: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say571; .L_SayX569;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 44: phrase nothing -> nothing ! To say there's: [ PHR_796_r44 ; ! [2: say ~[regarding nothing]there['re]~] say__p=1;! [3: regarding nothing] ParaContent(); RegardingSingleObject(nothing);! [4: ~there~] ParaContent(); print "there";! [5: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say572; .L_SayX570;rfalse; ]; ! From "English Language" by Graham Nelson ! Request 45: phrase nothing -> nothing ! To say possessive: [ PHR_797_r45 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the item is the player] if (((tmp_0 == player))) {! [4: say ~[our]~] say__p=1;! [5: our] ParaContent(); (PHR_767_r15 ()); .L_Say573; .L_SayX571;} else { ! [6: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [7: say ~[the item][apostrophe]~] say__p=1;! [8: the item] ParaContent(); print (the) tmp_0;! [9: apostrophe] ParaContent(); print "'"; .L_Say574; .L_SayX572;} else { ! [10: say ~[the item][apostrophe]s~] say__p=1;! [11: the item] ParaContent(); print (the) tmp_0;! [12: apostrophe] ParaContent(); print "'";! [13: ~s~] ParaContent(); print "s"; .L_Say575; .L_SayX573;} } rfalse; ]; ! From "English Language" by Graham Nelson ! Request 46: phrase nothing -> nothing ! To say Possessive: [ PHR_798_r46 tmp_0 ! Let/loop value, e.g., 'item': object ; ! [2: let the item be the prior named object] tmp_0 = prior_named_noun; ! [3: if the item is the player] if (((tmp_0 == player))) {! [4: say ~[Our]~] say__p=1;! [5: our] ParaContent(); (PHR_772_r20 ()); .L_Say576; .L_SayX574;} else { ! [6: if the prior naming context is plural] if ((((prior_named_list >= 2) || (prior_named_noun && prior_named_noun has pluralname)))) {! [7: say ~[The item][apostrophe]~] say__p=1;! [8: the item] ParaContent(); print (The) tmp_0;! [9: apostrophe] ParaContent(); print "'"; .L_Say577; .L_SayX575;} else { ! [10: say ~[The item][apostrophe]s~] say__p=1;! [11: the item] ParaContent(); print (The) tmp_0;! [12: apostrophe] ParaContent(); print "'";! [13: ~s~] ParaContent(); print "s"; .L_Say578; .L_SayX576;} } rfalse; ]; ! From "Basic Screen Effects" by Emily Short ! Request 47: phrase nothing -> nothing ! To pause the/-- game: [ PHR_804_r47 ; ! [2: carry out the pausing the game activity] CarryOutActivity(V34_pausing_the_game); rfalse; ]; ! From "Basic Screen Effects" by Emily Short ! Request 48: phrase table name -> nothing ! To fill the/-- status bar/line with ( selected table - a table-name ): [ PHR_816_r48 t_0 ! Call parameter 'selected table': table name I7RBLK; @push I7SFRAME; StackFrameCreate(2); BlkValueCreateOnStack(0, TEXT_TY); I7RBLK = KERNEL_5(t_0); BlkValueFreeOnStack(0); @pull I7SFRAME; return I7RBLK; ! nothing ]; [ KERNEL_5 t_0 ! Call parameter 'selected table': table name tmp_0 ! Let/loop value, e.g., '__n': number tmp_1 ! Let/loop value, e.g., '__index': number tmp_2 ! Let/loop value (deallocated by end of phrase) tmp_3 ! Let/loop value (deallocated by end of phrase) ct_0 ! currently selected table ct_1 ! currently selected row ; ! [2: let __n be the number of rows in the selected table] tmp_0 = TableRows(t_0); ! [3: deepen status line to __n rows] DeepStatus(tmp_0); ! [4: let __index be 1] tmp_1 = 1; ! [5: repeat through selected table] @push ct_0; @push ct_1; for (tmp_2=t_0, tmp_3=1, ct_0=tmp_2, ct_1=tmp_3: tmp_3<=TableRows(tmp_2): tmp_3++, ct_0=tmp_2, ct_1=tmp_3) if (TableRowIsBlank(ct_0, ct_1)==false) {! [6: move cursor to __index] I7VM_MoveCursorInStatusLine(tmp_1); ! [7: if there is left entry] if (((ExistsTableLookUpEntry(ct_0,107,ct_1)))) {! [8: say ~[left entry]~] say__p=1;! [9: left entry] ParaContent(); print (TEXT_TY_Say) TableLookUpEntry(ct_0,107,ct_1); .L_Say579; .L_SayX577;} ! [10: if there is central entry] if (((ExistsTableLookUpEntry(ct_0,108,ct_1)))) {! [11: center central entry at row __index] CenterPrint(BlkValueCopy(I7SFRAME, TableLookUpEntry(ct_0,108,ct_1)), tmp_1); } ! [12: if there is right entry] if (((ExistsTableLookUpEntry(ct_0,109,ct_1)))) {! [13: right align cursor to __index] RightAlign(tmp_1); ! [14: say ~[right entry]~] say__p=1;! [15: right entry] ParaContent(); print (TEXT_TY_Say) TableLookUpEntry(ct_0,109,ct_1); .L_Say580; .L_SayX578;} ! [16: increase __index by 1] tmp_1 = tmp_1 + 1;; } @pull ct_1; @pull ct_0;rfalse; ]; Array TX_R_0 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_0_R; [ TX_R_0_R ; ResponseViaActivity(R_313_RESP_A); ]; [ ADJUST_LIGHT_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_0; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_1 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_1_R; [ TX_R_1_R ; ResponseViaActivity(R_315_RESP_A); ]; [ GENERATE_ACTION_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_1; 'B': str = TX_R_2; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_2 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_2_R; [ TX_R_2_R ; ResponseViaActivity(R_315_RESP_B); ]; Array TX_R_3 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_3_R; [ TX_R_3_R ; ResponseViaActivity(R_322_RESP_A); ]; [ BASIC_ACCESSIBILITY_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_3; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_4 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_4_R; [ TX_R_4_R ; ResponseViaActivity(R_323_RESP_A); ]; [ BASIC_VISIBILITY_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_4; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_5 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_5_R; [ TX_R_5_R ; ResponseViaActivity(R_325_RESP_A); ]; [ REQUESTED_ACTIONS_REQUIRE_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_5; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_6 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_6_R; [ TX_R_6_R ; ResponseViaActivity(R_326_RESP_A); ]; [ CARRY_OUT_REQUESTED_ACTIONS_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_6; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_7 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_7_R; [ TX_R_7_R ; ResponseViaActivity(R_329_RESP_A); ]; [ ACCESS_THROUGH_BARRIERS_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_7; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_8 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_8_R; [ TX_R_8_R ; ResponseViaActivity(R_330_RESP_A); ]; [ CANT_REACH_INSIDE_CLOSED_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_8; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_9 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_9_R; [ TX_R_9_R ; ResponseViaActivity(R_331_RESP_A); ]; [ CANT_REACH_INSIDE_ROOMS_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_9; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_10 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_10_R; [ TX_R_10_R ; ResponseViaActivity(R_332_RESP_A); ]; [ CANT_REACH_OUTSIDE_CLOSED_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_10; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_11 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_11_R; [ TX_R_11_R ; ResponseViaActivity(R_333_RESP_A); ]; [ LIST_WRITER_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_11; 'B': str = TX_R_12; 'C': str = TX_R_13; 'D': str = TX_R_14; 'E': str = TX_R_15; 'F': str = TX_R_16; 'G': str = TX_R_17; 'H': str = TX_R_18; 'I': str = TX_R_19; 'J': str = TX_R_20; 'K': str = TX_R_21; 'L': str = TX_R_22; 'M': str = TX_R_23; 'N': str = TX_R_24; 'O': str = TX_R_25; 'P': str = TX_R_26; 'Q': str = TX_R_27; 'R': str = TX_R_28; 'S': str = TX_R_29; 'T': str = TX_R_30; 'U': str = TX_R_31; 'V': str = TX_R_32; 'W': str = TX_R_33; 'X': str = TX_R_34; 'Y': str = TX_R_35; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_12 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_12_R; [ TX_R_12_R ; ResponseViaActivity(R_333_RESP_B); ]; Array TX_R_13 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_13_R; [ TX_R_13_R ; ResponseViaActivity(R_333_RESP_C); ]; Array TX_R_14 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_14_R; [ TX_R_14_R ; ResponseViaActivity(R_333_RESP_D); ]; Array TX_R_15 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_15_R; [ TX_R_15_R ; ResponseViaActivity(R_333_RESP_E); ]; Array TX_R_16 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_16_R; [ TX_R_16_R ; ResponseViaActivity(R_333_RESP_F); ]; Array TX_R_17 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_17_R; [ TX_R_17_R ; ResponseViaActivity(R_333_RESP_G); ]; Array TX_R_18 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_18_R; [ TX_R_18_R ; ResponseViaActivity(R_333_RESP_H); ]; Array TX_R_19 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_19_R; [ TX_R_19_R ; ResponseViaActivity(R_333_RESP_I); ]; Array TX_R_20 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_20_R; [ TX_R_20_R ; ResponseViaActivity(R_333_RESP_J); ]; Array TX_R_21 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_21_R; [ TX_R_21_R ; ResponseViaActivity(R_333_RESP_K); ]; Array TX_R_22 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_22_R; [ TX_R_22_R ; ResponseViaActivity(R_333_RESP_L); ]; Array TX_R_23 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_23_R; [ TX_R_23_R ; ResponseViaActivity(R_333_RESP_M); ]; Array TX_R_24 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_24_R; [ TX_R_24_R ; ResponseViaActivity(R_333_RESP_N); ]; Array TX_R_25 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_25_R; [ TX_R_25_R ; ResponseViaActivity(R_333_RESP_O); ]; Array TX_R_26 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_26_R; [ TX_R_26_R ; ResponseViaActivity(R_333_RESP_P); ]; Array TX_R_27 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_27_R; [ TX_R_27_R ; ResponseViaActivity(R_333_RESP_Q); ]; Array TX_R_28 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_28_R; [ TX_R_28_R ; ResponseViaActivity(R_333_RESP_R); ]; Array TX_R_29 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_29_R; [ TX_R_29_R ; ResponseViaActivity(R_333_RESP_S); ]; Array TX_R_30 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_30_R; [ TX_R_30_R ; ResponseViaActivity(R_333_RESP_T); ]; Array TX_R_31 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_31_R; [ TX_R_31_R ; ResponseViaActivity(R_333_RESP_U); ]; Array TX_R_32 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_32_R; [ TX_R_32_R ; ResponseViaActivity(R_333_RESP_V); ]; Array TX_R_33 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_33_R; [ TX_R_33_R ; ResponseViaActivity(R_333_RESP_W); ]; Array TX_R_34 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_34_R; [ TX_R_34_R ; ResponseViaActivity(R_333_RESP_X); ]; Array TX_R_35 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_35_R; [ TX_R_35_R ; ResponseViaActivity(R_333_RESP_Y); ]; Array TX_R_36 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_36_R; [ TX_R_36_R ; ResponseViaActivity(R_334_RESP_A); ]; [ ACTION_PROCESSING_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_36; 'B': str = TX_R_37; 'C': str = TX_R_38; 'D': str = TX_R_39; 'E': str = TX_R_40; 'F': str = TX_R_41; 'G': str = TX_R_42; 'H': str = TX_R_43; 'I': str = TX_R_44; 'J': str = TX_R_45; 'K': str = TX_R_46; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_37 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_37_R; [ TX_R_37_R ; ResponseViaActivity(R_334_RESP_B); ]; Array TX_R_38 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_38_R; [ TX_R_38_R ; ResponseViaActivity(R_334_RESP_C); ]; Array TX_R_39 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_39_R; [ TX_R_39_R ; ResponseViaActivity(R_334_RESP_D); ]; Array TX_R_40 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_40_R; [ TX_R_40_R ; ResponseViaActivity(R_334_RESP_E); ]; Array TX_R_41 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_41_R; [ TX_R_41_R ; ResponseViaActivity(R_334_RESP_F); ]; Array TX_R_42 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_42_R; [ TX_R_42_R ; ResponseViaActivity(R_334_RESP_G); ]; Array TX_R_43 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_43_R; [ TX_R_43_R ; ResponseViaActivity(R_334_RESP_H); ]; Array TX_R_44 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_44_R; [ TX_R_44_R ; ResponseViaActivity(R_334_RESP_I); ]; Array TX_R_45 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_45_R; [ TX_R_45_R ; ResponseViaActivity(R_334_RESP_J); ]; Array TX_R_46 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_46_R; [ TX_R_46_R ; ResponseViaActivity(R_334_RESP_K); ]; Array TX_R_47 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_47_R; [ TX_R_47_R ; ResponseViaActivity(R_335_RESP_A); ]; [ PARSER_ERROR_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_47; 'B': str = TX_R_48; 'C': str = TX_R_49; 'D': str = TX_R_50; 'E': str = TX_R_51; 'F': str = TX_R_52; 'G': str = TX_R_53; 'H': str = TX_R_54; 'I': str = TX_R_55; 'J': str = TX_R_56; 'K': str = TX_R_57; 'L': str = TX_R_58; 'M': str = TX_R_59; 'N': str = TX_R_60; 'O': str = TX_R_61; 'P': str = TX_R_62; 'Q': str = TX_R_63; 'R': str = TX_R_64; 'S': str = TX_R_65; 'T': str = TX_R_66; 'U': str = TX_R_67; 'V': str = TX_R_68; 'W': str = TX_R_69; 'X': str = TX_R_70; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_48 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_48_R; [ TX_R_48_R ; ResponseViaActivity(R_335_RESP_B); ]; Array TX_R_49 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_49_R; [ TX_R_49_R ; ResponseViaActivity(R_335_RESP_C); ]; Array TX_R_50 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_50_R; [ TX_R_50_R ; ResponseViaActivity(R_335_RESP_D); ]; Array TX_R_51 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_51_R; [ TX_R_51_R ; ResponseViaActivity(R_335_RESP_E); ]; Array TX_R_52 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_52_R; [ TX_R_52_R ; ResponseViaActivity(R_335_RESP_F); ]; Array TX_R_53 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_53_R; [ TX_R_53_R ; ResponseViaActivity(R_335_RESP_G); ]; Array TX_R_54 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_54_R; [ TX_R_54_R ; ResponseViaActivity(R_335_RESP_H); ]; Array TX_R_55 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_55_R; [ TX_R_55_R ; ResponseViaActivity(R_335_RESP_I); ]; Array TX_R_56 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_56_R; [ TX_R_56_R ; ResponseViaActivity(R_335_RESP_J); ]; Array TX_R_57 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_57_R; [ TX_R_57_R ; ResponseViaActivity(R_335_RESP_K); ]; Array TX_R_58 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_58_R; [ TX_R_58_R ; ResponseViaActivity(R_335_RESP_L); ]; Array TX_R_59 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_59_R; [ TX_R_59_R ; ResponseViaActivity(R_335_RESP_M); ]; Array TX_R_60 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_60_R; [ TX_R_60_R ; ResponseViaActivity(R_335_RESP_N); ]; Array TX_R_61 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_61_R; [ TX_R_61_R ; ResponseViaActivity(R_335_RESP_O); ]; Array TX_R_62 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_62_R; [ TX_R_62_R ; ResponseViaActivity(R_335_RESP_P); ]; Array TX_R_63 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_63_R; [ TX_R_63_R ; ResponseViaActivity(R_335_RESP_Q); ]; Array TX_R_64 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_64_R; [ TX_R_64_R ; ResponseViaActivity(R_335_RESP_R); ]; Array TX_R_65 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_65_R; [ TX_R_65_R ; ResponseViaActivity(R_335_RESP_S); ]; Array TX_R_66 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_66_R; [ TX_R_66_R ; ResponseViaActivity(R_335_RESP_T); ]; Array TX_R_67 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_67_R; [ TX_R_67_R ; ResponseViaActivity(R_335_RESP_U); ]; Array TX_R_68 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_68_R; [ TX_R_68_R ; ResponseViaActivity(R_335_RESP_V); ]; Array TX_R_69 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_69_R; [ TX_R_69_R ; ResponseViaActivity(R_335_RESP_W); ]; Array TX_R_70 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_70_R; [ TX_R_70_R ; ResponseViaActivity(R_335_RESP_X); ]; Array TX_R_71 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_71_R; [ TX_R_71_R ; ResponseViaActivity(R_336_RESP_A); ]; [ PARSER_N_ERROR_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_71; 'B': str = TX_R_72; 'C': str = TX_R_73; 'D': str = TX_R_74; 'E': str = TX_R_75; 'F': str = TX_R_76; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_72 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_72_R; [ TX_R_72_R ; ResponseViaActivity(R_336_RESP_B); ]; Array TX_R_73 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_73_R; [ TX_R_73_R ; ResponseViaActivity(R_336_RESP_C); ]; Array TX_R_74 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_74_R; [ TX_R_74_R ; ResponseViaActivity(R_336_RESP_D); ]; Array TX_R_75 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_75_R; [ TX_R_75_R ; ResponseViaActivity(R_336_RESP_E); ]; Array TX_R_76 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_76_R; [ TX_R_76_R ; ResponseViaActivity(R_336_RESP_F); ]; Array TX_R_77 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_77_R; [ TX_R_77_R ; ResponseViaActivity(R_337_RESP_A); ]; [ DARKNESS_NAME_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_77; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_78 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_78_R; [ TX_R_78_R ; ResponseViaActivity(R_338_RESP_A); ]; [ PARSER_COMMAND_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_78; 'B': str = TX_R_79; 'C': str = TX_R_80; 'D': str = TX_R_81; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_79 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_79_R; [ TX_R_79_R ; ResponseViaActivity(R_338_RESP_B); ]; Array TX_R_80 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_80_R; [ TX_R_80_R ; ResponseViaActivity(R_338_RESP_C); ]; Array TX_R_81 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_81_R; [ TX_R_81_R ; ResponseViaActivity(R_338_RESP_D); ]; Array TX_R_82 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_82_R; [ TX_R_82_R ; ResponseViaActivity(R_339_RESP_A); ]; [ PARSER_CLARIF_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_82; 'B': str = TX_R_83; 'C': str = TX_R_84; 'D': str = TX_R_85; 'E': str = TX_R_86; 'F': str = TX_R_87; 'G': str = TX_R_88; 'H': str = TX_R_89; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_83 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_83_R; [ TX_R_83_R ; ResponseViaActivity(R_339_RESP_B); ]; Array TX_R_84 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_84_R; [ TX_R_84_R ; ResponseViaActivity(R_339_RESP_C); ]; Array TX_R_85 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_85_R; [ TX_R_85_R ; ResponseViaActivity(R_339_RESP_D); ]; Array TX_R_86 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_86_R; [ TX_R_86_R ; ResponseViaActivity(R_339_RESP_E); ]; Array TX_R_87 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_87_R; [ TX_R_87_R ; ResponseViaActivity(R_339_RESP_F); ]; Array TX_R_88 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_88_R; [ TX_R_88_R ; ResponseViaActivity(R_339_RESP_G); ]; Array TX_R_89 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_89_R; [ TX_R_89_R ; ResponseViaActivity(R_339_RESP_H); ]; Array TX_R_90 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_90_R; [ TX_R_90_R ; ResponseViaActivity(R_340_RESP_A); ]; [ YES_OR_NO_QUESTION_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_90; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_91 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_91_R; [ TX_R_91_R ; ResponseViaActivity(R_341_RESP_A); ]; [ PRINT_PROTAGONIST_INTERNAL_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_91; 'B': str = TX_R_92; 'C': str = TX_R_93; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_92 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_92_R; [ TX_R_92_R ; ResponseViaActivity(R_341_RESP_B); ]; Array TX_R_93 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_93_R; [ TX_R_93_R ; ResponseViaActivity(R_341_RESP_C); ]; Array TX_R_94 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_94_R; [ TX_R_94_R ; ResponseViaActivity(R_344_RESP_A); ]; [ STANDARD_IMPLICIT_TAKING_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_94; 'B': str = TX_R_95; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_95 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_95_R; [ TX_R_95_R ; ResponseViaActivity(R_344_RESP_B); ]; Array TX_R_96 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_96_R; [ TX_R_96_R ; ResponseViaActivity(R_346_RESP_A); ]; [ PRINT_OBITUARY_HEADLINE_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_96; 'B': str = TX_R_97; 'C': str = TX_R_98; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_97 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_97_R; [ TX_R_97_R ; ResponseViaActivity(R_346_RESP_B); ]; Array TX_R_98 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_98_R; [ TX_R_98_R ; ResponseViaActivity(R_346_RESP_C); ]; Array TX_R_99 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_99_R; [ TX_R_99_R ; ResponseViaActivity(R_352_RESP_A); ]; [ IMMEDIATELY_UNDO_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_99; 'B': str = TX_R_100; 'C': str = TX_R_101; 'D': str = TX_R_102; 'E': str = TX_R_103; 'F': str = TX_R_104; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_100 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_100_R; [ TX_R_100_R ; ResponseViaActivity(R_352_RESP_B); ]; Array TX_R_101 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_101_R; [ TX_R_101_R ; ResponseViaActivity(R_352_RESP_C); ]; Array TX_R_102 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_102_R; [ TX_R_102_R ; ResponseViaActivity(R_352_RESP_D); ]; Array TX_R_103 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_103_R; [ TX_R_103_R ; ResponseViaActivity(R_352_RESP_E); ]; Array TX_R_104 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_104_R; [ TX_R_104_R ; ResponseViaActivity(R_352_RESP_F); ]; Array TX_R_105 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_105_R; [ TX_R_105_R ; ResponseViaActivity(R_355_RESP_A); ]; [ QUIT_THE_GAME_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_105; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_106 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_106_R; [ TX_R_106_R ; ResponseViaActivity(R_356_RESP_A); ]; [ SAVE_THE_GAME_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_106; 'B': str = TX_R_107; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_107 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_107_R; [ TX_R_107_R ; ResponseViaActivity(R_356_RESP_B); ]; Array TX_R_108 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_108_R; [ TX_R_108_R ; ResponseViaActivity(R_357_RESP_A); ]; [ RESTORE_THE_GAME_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_108; 'B': str = TX_R_109; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_109 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_109_R; [ TX_R_109_R ; ResponseViaActivity(R_357_RESP_B); ]; Array TX_R_110 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_110_R; [ TX_R_110_R ; ResponseViaActivity(R_358_RESP_A); ]; [ RESTART_THE_GAME_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_110; 'B': str = TX_R_111; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_111 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_111_R; [ TX_R_111_R ; ResponseViaActivity(R_358_RESP_B); ]; Array TX_R_112 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_112_R; [ TX_R_112_R ; ResponseViaActivity(R_359_RESP_A); ]; [ VERIFY_THE_STORY_FILE_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_112; 'B': str = TX_R_113; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_113 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_113_R; [ TX_R_113_R ; ResponseViaActivity(R_359_RESP_B); ]; Array TX_R_114 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_114_R; [ TX_R_114_R ; ResponseViaActivity(R_360_RESP_A); ]; [ SWITCH_TRANSCRIPT_ON_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_114; 'B': str = TX_R_115; 'C': str = TX_R_116; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_115 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_115_R; [ TX_R_115_R ; ResponseViaActivity(R_360_RESP_B); ]; Array TX_R_116 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_116_R; [ TX_R_116_R ; ResponseViaActivity(R_360_RESP_C); ]; Array TX_R_117 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_117_R; [ TX_R_117_R ; ResponseViaActivity(R_361_RESP_A); ]; [ SWITCH_TRANSCRIPT_OFF_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_117; 'B': str = TX_R_118; 'C': str = TX_R_119; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_118 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_118_R; [ TX_R_118_R ; ResponseViaActivity(R_361_RESP_B); ]; Array TX_R_119 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_119_R; [ TX_R_119_R ; ResponseViaActivity(R_361_RESP_C); ]; Array TX_R_120 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_120_R; [ TX_R_120_R ; ResponseViaActivity(R_363_RESP_A); ]; [ ANNOUNCE_SCORE_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_120; 'B': str = TX_R_121; 'C': str = TX_R_122; 'D': str = TX_R_123; 'E': str = TX_R_124; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_121 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_121_R; [ TX_R_121_R ; ResponseViaActivity(R_363_RESP_B); ]; Array TX_R_122 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_122_R; [ TX_R_122_R ; ResponseViaActivity(R_363_RESP_C); ]; Array TX_R_123 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_123_R; [ TX_R_123_R ; ResponseViaActivity(R_363_RESP_D); ]; Array TX_R_124 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_124_R; [ TX_R_124_R ; ResponseViaActivity(R_363_RESP_E); ]; Array TX_R_125 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_125_R; [ TX_R_125_R ; ResponseViaActivity(R_365_RESP_A); ]; [ REP_PREFER_ABBREVIATED_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_125; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_126 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_126_R; [ TX_R_126_R ; ResponseViaActivity(R_367_RESP_A); ]; [ REP_PREFER_UNABBREVIATED_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_126; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_127 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_127_R; [ TX_R_127_R ; ResponseViaActivity(R_369_RESP_A); ]; [ REP_PREFER_SOMETIMES_ABBR_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_127; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_128 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_128_R; [ TX_R_128_R ; ResponseViaActivity(R_371_RESP_A); ]; [ REP_SWITCH_NOTIFY_ON_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_128; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_129 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_129_R; [ TX_R_129_R ; ResponseViaActivity(R_373_RESP_A); ]; [ REP_SWITCH_NOTIFY_OFF_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_129; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_130 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_130_R; [ TX_R_130_R ; ResponseViaActivity(R_374_RESP_A); ]; [ ANNOUNCE_PRONOUN_MEANINGS_RM code ! Implied call parameter val ! Implied call parameter val2 ! Implied call parameter s ! internal use only s2 ! internal use only s3 ! internal use only str ! internal use only f ! internal use only ; if ((code >= 'a') && (code <= 'z')) { f = true; code = code - 'a' + 'A'; } s = noun; s2 = second; s3 = parsed_number; noun = val; second = val2; parsed_number = val; switch (code) { 'A': str = TX_R_130; 'B': str = TX_R_131; 'C': str = TX_R_132; 'D': str = TX_R_133; } if ((str) && (f == false)) { TEXT_TY_Say(str); } noun = s; second = s2; parsed_number = s3; return str; ]; Array TX_R_131 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_131_R; [ TX_R_131_R ; ResponseViaActivity(R_374_RESP_B); ]; Array TX_R_132 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_132_R; [ TX_R_132_R ; ResponseViaActivity(R_374_RESP_C); ]; Array TX_R_133 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_133_R; [ TX_R_133_R ; ResponseViaActivity(R_374_RESP_D); ]; Array TX_R_134 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_134_R; [ TX_R_134_R ; ResponseViaActivity(R_11_RESP_A); ]; Array TX_R_135 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_135_R; [ TX_R_135_R ; ResponseViaActivity(R_276_RESP_A); ]; Array TX_R_136 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_136_R; [ TX_R_136_R ; ResponseViaActivity(R_277_RESP_A); ]; Array TX_R_137 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_137_R; [ TX_R_137_R ; ResponseViaActivity(R_278_RESP_A); ]; Array TX_R_138 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_138_R; [ TX_R_138_R ; ResponseViaActivity(R_279_RESP_A); ]; Array TX_R_139 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_139_R; [ TX_R_139_R ; ResponseViaActivity(R_298_RESP_A); ]; Array TX_R_140 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_140_R; [ TX_R_140_R ; ResponseViaActivity(R_293_RESP_A); ]; Array TX_R_141 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_141_R; [ TX_R_141_R ; ResponseViaActivity(R_292_RESP_A); ]; Array TX_R_142 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_142_R; [ TX_R_142_R ; ResponseViaActivity(R_39_RESP_A); ]; Array TX_R_143 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_143_R; [ TX_R_143_R ; ResponseViaActivity(R_41_RESP_A); ]; Array TX_R_144 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_144_R; [ TX_R_144_R ; ResponseViaActivity(R_41_RESP_B); ]; Array TX_R_145 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_145_R; [ TX_R_145_R ; ResponseViaActivity(R_40_RESP_A); ]; Array TX_R_146 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_146_R; [ TX_R_146_R ; ResponseViaActivity(R_42_RESP_A); ]; Array TX_R_147 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_147_R; [ TX_R_147_R ; ResponseViaActivity(R_46_RESP_A); ]; Array TX_R_148 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_148_R; [ TX_R_148_R ; ResponseViaActivity(R_46_RESP_B); ]; Array TX_R_149 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_149_R; [ TX_R_149_R ; ResponseViaActivity(R_46_RESP_C); ]; Array TX_R_150 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_150_R; [ TX_R_150_R ; ResponseViaActivity(R_46_RESP_D); ]; Array TX_R_151 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_151_R; [ TX_R_151_R ; ResponseViaActivity(R_46_RESP_E); ]; Array TX_R_152 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_152_R; [ TX_R_152_R ; ResponseViaActivity(R_46_RESP_F); ]; Array TX_R_153 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_153_R; [ TX_R_153_R ; ResponseViaActivity(R_53_RESP_A); ]; Array TX_R_154 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_154_R; [ TX_R_154_R ; ResponseViaActivity(R_55_RESP_A); ]; Array TX_R_155 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_155_R; [ TX_R_155_R ; ResponseViaActivity(R_56_RESP_A); ]; Array TX_R_156 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_156_R; [ TX_R_156_R ; ResponseViaActivity(R_57_RESP_A); ]; Array TX_R_157 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_157_R; [ TX_R_157_R ; ResponseViaActivity(R_58_RESP_A); ]; Array TX_R_158 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_158_R; [ TX_R_158_R ; ResponseViaActivity(R_59_RESP_A); ]; Array TX_R_159 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_159_R; [ TX_R_159_R ; ResponseViaActivity(R_60_RESP_A); ]; Array TX_R_160 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_160_R; [ TX_R_160_R ; ResponseViaActivity(R_61_RESP_A); ]; Array TX_R_161 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_161_R; [ TX_R_161_R ; ResponseViaActivity(R_62_RESP_A); ]; Array TX_R_162 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_162_R; [ TX_R_162_R ; ResponseViaActivity(R_63_RESP_A); ]; Array TX_R_163 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_163_R; [ TX_R_163_R ; ResponseViaActivity(R_64_RESP_A); ]; Array TX_R_164 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_164_R; [ TX_R_164_R ; ResponseViaActivity(R_65_RESP_A); ]; Array TX_R_165 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_165_R; [ TX_R_165_R ; ResponseViaActivity(R_66_RESP_A); ]; Array TX_R_166 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_166_R; [ TX_R_166_R ; ResponseViaActivity(R_67_RESP_A); ]; Array TX_R_167 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_167_R; [ TX_R_167_R ; ResponseViaActivity(R_68_RESP_A); ]; Array TX_R_168 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_168_R; [ TX_R_168_R ; ResponseViaActivity(R_69_RESP_A); ]; Array TX_R_169 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_169_R; [ TX_R_169_R ; ResponseViaActivity(R_70_RESP_A); ]; Array TX_R_170 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_170_R; [ TX_R_170_R ; ResponseViaActivity(R_71_RESP_A); ]; Array TX_R_171 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_171_R; [ TX_R_171_R ; ResponseViaActivity(R_73_RESP_A); ]; Array TX_R_172 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_172_R; [ TX_R_172_R ; ResponseViaActivity(R_73_RESP_B); ]; Array TX_R_173 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_173_R; [ TX_R_173_R ; ResponseViaActivity(R_74_RESP_A); ]; Array TX_R_174 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_174_R; [ TX_R_174_R ; ResponseViaActivity(R_75_RESP_A); ]; Array TX_R_175 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_175_R; [ TX_R_175_R ; ResponseViaActivity(R_78_RESP_A); ]; Array TX_R_176 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_176_R; [ TX_R_176_R ; ResponseViaActivity(R_77_RESP_A); ]; Array TX_R_177 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_177_R; [ TX_R_177_R ; ResponseViaActivity(R_79_RESP_A); ]; Array TX_R_178 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_178_R; [ TX_R_178_R ; ResponseViaActivity(R_80_RESP_A); ]; Array TX_R_179 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_179_R; [ TX_R_179_R ; ResponseViaActivity(R_81_RESP_A); ]; Array TX_R_180 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_180_R; [ TX_R_180_R ; ResponseViaActivity(R_82_RESP_A); ]; Array TX_R_181 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_181_R; [ TX_R_181_R ; ResponseViaActivity(R_82_RESP_B); ]; Array TX_R_182 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_182_R; [ TX_R_182_R ; ResponseViaActivity(R_84_RESP_A); ]; Array TX_R_183 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_183_R; [ TX_R_183_R ; ResponseViaActivity(R_84_RESP_B); ]; Array TX_R_184 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_184_R; [ TX_R_184_R ; ResponseViaActivity(R_87_RESP_A); ]; Array TX_R_185 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_185_R; [ TX_R_185_R ; ResponseViaActivity(R_88_RESP_A); ]; Array TX_R_186 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_186_R; [ TX_R_186_R ; ResponseViaActivity(R_89_RESP_A); ]; Array TX_R_187 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_187_R; [ TX_R_187_R ; ResponseViaActivity(R_90_RESP_A); ]; Array TX_R_188 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_188_R; [ TX_R_188_R ; ResponseViaActivity(R_92_RESP_A); ]; Array TX_R_189 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_189_R; [ TX_R_189_R ; ResponseViaActivity(R_93_RESP_A); ]; Array TX_R_190 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_190_R; [ TX_R_190_R ; ResponseViaActivity(R_96_RESP_A); ]; Array TX_R_191 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_191_R; [ TX_R_191_R ; ResponseViaActivity(R_97_RESP_A); ]; Array TX_R_192 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_192_R; [ TX_R_192_R ; ResponseViaActivity(R_98_RESP_A); ]; Array TX_R_193 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_193_R; [ TX_R_193_R ; ResponseViaActivity(R_99_RESP_A); ]; Array TX_R_194 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_194_R; [ TX_R_194_R ; ResponseViaActivity(R_100_RESP_A); ]; Array TX_R_195 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_195_R; [ TX_R_195_R ; ResponseViaActivity(R_102_RESP_A); ]; Array TX_R_196 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_196_R; [ TX_R_196_R ; ResponseViaActivity(R_103_RESP_A); ]; Array TX_R_197 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_197_R; [ TX_R_197_R ; ResponseViaActivity(R_104_RESP_A); ]; Array TX_R_198 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_198_R; [ TX_R_198_R ; ResponseViaActivity(R_105_RESP_A); ]; Array TX_R_199 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_199_R; [ TX_R_199_R ; ResponseViaActivity(R_106_RESP_A); ]; Array TX_R_200 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_200_R; [ TX_R_200_R ; ResponseViaActivity(R_109_RESP_A); ]; Array TX_R_201 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_201_R; [ TX_R_201_R ; ResponseViaActivity(R_109_RESP_B); ]; Array TX_R_202 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_202_R; [ TX_R_202_R ; ResponseViaActivity(R_111_RESP_A); ]; Array TX_R_203 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_203_R; [ TX_R_203_R ; ResponseViaActivity(R_112_RESP_A); ]; Array TX_R_204 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_204_R; [ TX_R_204_R ; ResponseViaActivity(R_112_RESP_B); ]; Array TX_R_205 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_205_R; [ TX_R_205_R ; ResponseViaActivity(R_113_RESP_A); ]; Array TX_R_206 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_206_R; [ TX_R_206_R ; ResponseViaActivity(R_114_RESP_A); ]; Array TX_R_207 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_207_R; [ TX_R_207_R ; ResponseViaActivity(R_116_RESP_A); ]; Array TX_R_208 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_208_R; [ TX_R_208_R ; ResponseViaActivity(R_116_RESP_B); ]; Array TX_R_209 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_209_R; [ TX_R_209_R ; ResponseViaActivity(R_120_RESP_A); ]; Array TX_R_210 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_210_R; [ TX_R_210_R ; ResponseViaActivity(R_120_RESP_B); ]; Array TX_R_211 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_211_R; [ TX_R_211_R ; ResponseViaActivity(R_120_RESP_C); ]; Array TX_R_212 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_212_R; [ TX_R_212_R ; ResponseViaActivity(R_120_RESP_D); ]; Array TX_R_213 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_213_R; [ TX_R_213_R ; ResponseViaActivity(R_120_RESP_E); ]; Array TX_R_214 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_214_R; [ TX_R_214_R ; ResponseViaActivity(R_120_RESP_F); ]; Array TX_R_215 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_215_R; [ TX_R_215_R ; ResponseViaActivity(R_120_RESP_G); ]; Array TX_R_216 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_216_R; [ TX_R_216_R ; ResponseViaActivity(R_120_RESP_H); ]; Array TX_R_217 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_217_R; [ TX_R_217_R ; ResponseViaActivity(R_120_RESP_I); ]; Array TX_R_218 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_218_R; [ TX_R_218_R ; ResponseViaActivity(R_120_RESP_J); ]; Array TX_R_219 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_219_R; [ TX_R_219_R ; ResponseViaActivity(R_120_RESP_K); ]; Array TX_R_220 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_220_R; [ TX_R_220_R ; ResponseViaActivity(R_120_RESP_L); ]; Array TX_R_221 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_221_R; [ TX_R_221_R ; ResponseViaActivity(R_120_RESP_M); ]; Array TX_R_222 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_222_R; [ TX_R_222_R ; ResponseViaActivity(R_120_RESP_N); ]; Array TX_R_223 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_223_R; [ TX_R_223_R ; ResponseViaActivity(R_120_RESP_O); ]; Array TX_R_224 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_224_R; [ TX_R_224_R ; ResponseViaActivity(R_120_RESP_P); ]; Array TX_R_225 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_225_R; [ TX_R_225_R ; ResponseViaActivity(R_120_RESP_Q); ]; Array TX_R_226 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_226_R; [ TX_R_226_R ; ResponseViaActivity(R_120_RESP_R); ]; Array TX_R_227 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_227_R; [ TX_R_227_R ; ResponseViaActivity(R_120_RESP_S); ]; Array TX_R_228 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_228_R; [ TX_R_228_R ; ResponseViaActivity(R_124_RESP_A); ]; Array TX_R_229 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_229_R; [ TX_R_229_R ; ResponseViaActivity(R_124_RESP_B); ]; Array TX_R_230 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_230_R; [ TX_R_230_R ; ResponseViaActivity(R_125_RESP_A); ]; Array TX_R_231 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_231_R; [ TX_R_231_R ; ResponseViaActivity(R_125_RESP_B); ]; Array TX_R_232 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_232_R; [ TX_R_232_R ; ResponseViaActivity(R_125_RESP_C); ]; Array TX_R_233 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_233_R; [ TX_R_233_R ; ResponseViaActivity(R_125_RESP_D); ]; Array TX_R_234 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_234_R; [ TX_R_234_R ; ResponseViaActivity(R_126_RESP_A); ]; Array TX_R_235 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_235_R; [ TX_R_235_R ; ResponseViaActivity(R_127_RESP_A); ]; Array TX_R_236 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_236_R; [ TX_R_236_R ; ResponseViaActivity(R_127_RESP_B); ]; Array TX_R_237 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_237_R; [ TX_R_237_R ; ResponseViaActivity(R_128_RESP_A); ]; Array TX_R_238 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_238_R; [ TX_R_238_R ; ResponseViaActivity(R_129_RESP_A); ]; Array TX_R_239 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_239_R; [ TX_R_239_R ; ResponseViaActivity(R_129_RESP_B); ]; Array TX_R_240 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_240_R; [ TX_R_240_R ; ResponseViaActivity(R_129_RESP_C); ]; Array TX_R_241 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_241_R; [ TX_R_241_R ; ResponseViaActivity(R_129_RESP_D); ]; Array TX_R_242 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_242_R; [ TX_R_242_R ; ResponseViaActivity(R_129_RESP_E); ]; Array TX_R_243 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_243_R; [ TX_R_243_R ; ResponseViaActivity(R_131_RESP_A); ]; Array TX_R_244 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_244_R; [ TX_R_244_R ; ResponseViaActivity(R_131_RESP_B); ]; Array TX_R_245 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_245_R; [ TX_R_245_R ; ResponseViaActivity(R_131_RESP_C); ]; Array TX_R_246 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_246_R; [ TX_R_246_R ; ResponseViaActivity(R_131_RESP_D); ]; Array TX_R_247 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_247_R; [ TX_R_247_R ; ResponseViaActivity(R_134_RESP_A); ]; Array TX_R_248 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_248_R; [ TX_R_248_R ; ResponseViaActivity(R_135_RESP_A); ]; Array TX_R_249 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_249_R; [ TX_R_249_R ; ResponseViaActivity(R_138_RESP_A); ]; Array TX_R_250 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_250_R; [ TX_R_250_R ; ResponseViaActivity(R_138_RESP_B); ]; Array TX_R_251 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_251_R; [ TX_R_251_R ; ResponseViaActivity(R_138_RESP_C); ]; Array TX_R_252 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_252_R; [ TX_R_252_R ; ResponseViaActivity(R_140_RESP_A); ]; Array TX_R_253 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_253_R; [ TX_R_253_R ; ResponseViaActivity(R_142_RESP_A); ]; Array TX_R_254 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_254_R; [ TX_R_254_R ; ResponseViaActivity(R_146_RESP_A); ]; Array TX_R_255 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_255_R; [ TX_R_255_R ; ResponseViaActivity(R_146_RESP_B); ]; Array TX_R_256 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_256_R; [ TX_R_256_R ; ResponseViaActivity(R_146_RESP_C); ]; Array TX_R_257 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_257_R; [ TX_R_257_R ; ResponseViaActivity(R_147_RESP_A); ]; Array TX_R_258 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_258_R; [ TX_R_258_R ; ResponseViaActivity(R_150_RESP_A); ]; Array TX_R_259 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_259_R; [ TX_R_259_R ; ResponseViaActivity(R_152_RESP_A); ]; Array TX_R_260 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_260_R; [ TX_R_260_R ; ResponseViaActivity(R_153_RESP_A); ]; Array TX_R_261 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_261_R; [ TX_R_261_R ; ResponseViaActivity(R_153_RESP_B); ]; Array TX_R_262 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_262_R; [ TX_R_262_R ; ResponseViaActivity(R_154_RESP_A); ]; Array TX_R_263 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_263_R; [ TX_R_263_R ; ResponseViaActivity(R_155_RESP_A); ]; Array TX_R_264 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_264_R; [ TX_R_264_R ; ResponseViaActivity(R_156_RESP_A); ]; Array TX_R_265 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_265_R; [ TX_R_265_R ; ResponseViaActivity(R_157_RESP_A); ]; Array TX_R_266 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_266_R; [ TX_R_266_R ; ResponseViaActivity(R_158_RESP_A); ]; Array TX_R_267 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_267_R; [ TX_R_267_R ; ResponseViaActivity(R_159_RESP_A); ]; Array TX_R_268 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_268_R; [ TX_R_268_R ; ResponseViaActivity(R_160_RESP_A); ]; Array TX_R_269 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_269_R; [ TX_R_269_R ; ResponseViaActivity(R_161_RESP_A); ]; Array TX_R_270 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_270_R; [ TX_R_270_R ; ResponseViaActivity(R_162_RESP_A); ]; Array TX_R_271 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_271_R; [ TX_R_271_R ; ResponseViaActivity(R_162_RESP_B); ]; Array TX_R_272 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_272_R; [ TX_R_272_R ; ResponseViaActivity(R_163_RESP_A); ]; Array TX_R_273 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_273_R; [ TX_R_273_R ; ResponseViaActivity(R_163_RESP_B); ]; Array TX_R_274 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_274_R; [ TX_R_274_R ; ResponseViaActivity(R_164_RESP_A); ]; Array TX_R_275 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_275_R; [ TX_R_275_R ; ResponseViaActivity(R_165_RESP_A); ]; Array TX_R_276 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_276_R; [ TX_R_276_R ; ResponseViaActivity(R_165_RESP_B); ]; Array TX_R_277 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_277_R; [ TX_R_277_R ; ResponseViaActivity(R_166_RESP_A); ]; Array TX_R_278 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_278_R; [ TX_R_278_R ; ResponseViaActivity(R_167_RESP_A); ]; Array TX_R_279 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_279_R; [ TX_R_279_R ; ResponseViaActivity(R_168_RESP_A); ]; Array TX_R_280 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_280_R; [ TX_R_280_R ; ResponseViaActivity(R_287_RESP_A); ]; Array TX_R_281 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_281_R; [ TX_R_281_R ; ResponseViaActivity(R_171_RESP_A); ]; Array TX_R_282 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_282_R; [ TX_R_282_R ; ResponseViaActivity(R_171_RESP_B); ]; Array TX_R_283 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_283_R; [ TX_R_283_R ; ResponseViaActivity(R_172_RESP_A); ]; Array TX_R_284 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_284_R; [ TX_R_284_R ; ResponseViaActivity(R_173_RESP_A); ]; Array TX_R_285 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_285_R; [ TX_R_285_R ; ResponseViaActivity(R_176_RESP_A); ]; Array TX_R_286 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_286_R; [ TX_R_286_R ; ResponseViaActivity(R_176_RESP_B); ]; Array TX_R_287 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_287_R; [ TX_R_287_R ; ResponseViaActivity(R_177_RESP_A); ]; Array TX_R_288 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_288_R; [ TX_R_288_R ; ResponseViaActivity(R_178_RESP_A); ]; Array TX_R_289 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_289_R; [ TX_R_289_R ; ResponseViaActivity(R_180_RESP_A); ]; Array TX_R_290 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_290_R; [ TX_R_290_R ; ResponseViaActivity(R_181_RESP_A); ]; Array TX_R_291 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_291_R; [ TX_R_291_R ; ResponseViaActivity(R_182_RESP_A); ]; Array TX_R_292 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_292_R; [ TX_R_292_R ; ResponseViaActivity(R_184_RESP_A); ]; Array TX_R_293 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_293_R; [ TX_R_293_R ; ResponseViaActivity(R_185_RESP_A); ]; Array TX_R_294 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_294_R; [ TX_R_294_R ; ResponseViaActivity(R_186_RESP_A); ]; Array TX_R_295 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_295_R; [ TX_R_295_R ; ResponseViaActivity(R_187_RESP_A); ]; Array TX_R_296 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_296_R; [ TX_R_296_R ; ResponseViaActivity(R_189_RESP_A); ]; Array TX_R_297 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_297_R; [ TX_R_297_R ; ResponseViaActivity(R_190_RESP_A); ]; Array TX_R_298 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_298_R; [ TX_R_298_R ; ResponseViaActivity(R_190_RESP_B); ]; Array TX_R_299 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_299_R; [ TX_R_299_R ; ResponseViaActivity(R_190_RESP_C); ]; Array TX_R_300 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_300_R; [ TX_R_300_R ; ResponseViaActivity(R_191_RESP_A); ]; Array TX_R_301 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_301_R; [ TX_R_301_R ; ResponseViaActivity(R_192_RESP_A); ]; Array TX_R_302 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_302_R; [ TX_R_302_R ; ResponseViaActivity(R_194_RESP_A); ]; Array TX_R_303 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_303_R; [ TX_R_303_R ; ResponseViaActivity(R_194_RESP_B); ]; Array TX_R_304 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_304_R; [ TX_R_304_R ; ResponseViaActivity(R_194_RESP_C); ]; Array TX_R_305 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_305_R; [ TX_R_305_R ; ResponseViaActivity(R_195_RESP_A); ]; Array TX_R_306 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_306_R; [ TX_R_306_R ; ResponseViaActivity(R_196_RESP_A); ]; Array TX_R_307 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_307_R; [ TX_R_307_R ; ResponseViaActivity(R_197_RESP_A); ]; Array TX_R_308 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_308_R; [ TX_R_308_R ; ResponseViaActivity(R_199_RESP_A); ]; Array TX_R_309 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_309_R; [ TX_R_309_R ; ResponseViaActivity(R_199_RESP_B); ]; Array TX_R_310 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_310_R; [ TX_R_310_R ; ResponseViaActivity(R_200_RESP_A); ]; Array TX_R_311 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_311_R; [ TX_R_311_R ; ResponseViaActivity(R_201_RESP_A); ]; Array TX_R_312 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_312_R; [ TX_R_312_R ; ResponseViaActivity(R_203_RESP_A); ]; Array TX_R_313 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_313_R; [ TX_R_313_R ; ResponseViaActivity(R_203_RESP_B); ]; Array TX_R_314 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_314_R; [ TX_R_314_R ; ResponseViaActivity(R_204_RESP_A); ]; Array TX_R_315 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_315_R; [ TX_R_315_R ; ResponseViaActivity(R_205_RESP_A); ]; Array TX_R_316 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_316_R; [ TX_R_316_R ; ResponseViaActivity(R_206_RESP_A); ]; Array TX_R_317 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_317_R; [ TX_R_317_R ; ResponseViaActivity(R_207_RESP_A); ]; Array TX_R_318 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_318_R; [ TX_R_318_R ; ResponseViaActivity(R_208_RESP_A); ]; Array TX_R_319 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_319_R; [ TX_R_319_R ; ResponseViaActivity(R_209_RESP_A); ]; Array TX_R_320 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_320_R; [ TX_R_320_R ; ResponseViaActivity(R_211_RESP_A); ]; Array TX_R_321 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_321_R; [ TX_R_321_R ; ResponseViaActivity(R_211_RESP_B); ]; Array TX_R_322 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_322_R; [ TX_R_322_R ; ResponseViaActivity(R_211_RESP_C); ]; Array TX_R_323 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_323_R; [ TX_R_323_R ; ResponseViaActivity(R_212_RESP_A); ]; Array TX_R_324 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_324_R; [ TX_R_324_R ; ResponseViaActivity(R_214_RESP_A); ]; Array TX_R_325 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_325_R; [ TX_R_325_R ; ResponseViaActivity(R_215_RESP_A); ]; Array TX_R_326 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_326_R; [ TX_R_326_R ; ResponseViaActivity(R_216_RESP_A); ]; Array TX_R_327 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_327_R; [ TX_R_327_R ; ResponseViaActivity(R_217_RESP_A); ]; Array TX_R_328 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_328_R; [ TX_R_328_R ; ResponseViaActivity(R_218_RESP_A); ]; Array TX_R_329 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_329_R; [ TX_R_329_R ; ResponseViaActivity(R_219_RESP_A); ]; Array TX_R_330 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_330_R; [ TX_R_330_R ; ResponseViaActivity(R_220_RESP_A); ]; Array TX_R_331 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_331_R; [ TX_R_331_R ; ResponseViaActivity(R_221_RESP_A); ]; Array TX_R_332 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_332_R; [ TX_R_332_R ; ResponseViaActivity(R_222_RESP_A); ]; Array TX_R_333 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_333_R; [ TX_R_333_R ; ResponseViaActivity(R_223_RESP_A); ]; Array TX_R_334 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_334_R; [ TX_R_334_R ; ResponseViaActivity(R_224_RESP_A); ]; Array TX_R_335 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_335_R; [ TX_R_335_R ; ResponseViaActivity(R_225_RESP_A); ]; Array TX_R_336 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_336_R; [ TX_R_336_R ; ResponseViaActivity(R_228_RESP_A); ]; Array TX_R_337 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_337_R; [ TX_R_337_R ; ResponseViaActivity(R_228_RESP_B); ]; Array TX_R_338 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_338_R; [ TX_R_338_R ; ResponseViaActivity(R_229_RESP_A); ]; Array TX_R_339 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_339_R; [ TX_R_339_R ; ResponseViaActivity(R_229_RESP_B); ]; Array TX_R_340 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_340_R; [ TX_R_340_R ; ResponseViaActivity(R_230_RESP_A); ]; Array TX_R_341 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_341_R; [ TX_R_341_R ; ResponseViaActivity(R_230_RESP_B); ]; Array TX_R_342 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_342_R; [ TX_R_342_R ; ResponseViaActivity(R_230_RESP_C); ]; Array TX_R_343 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_343_R; [ TX_R_343_R ; ResponseViaActivity(R_231_RESP_A); ]; Array TX_R_344 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_344_R; [ TX_R_344_R ; ResponseViaActivity(R_231_RESP_B); ]; Array TX_R_345 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_345_R; [ TX_R_345_R ; ResponseViaActivity(R_232_RESP_A); ]; Array TX_R_346 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_346_R; [ TX_R_346_R ; ResponseViaActivity(R_233_RESP_A); ]; Array TX_R_347 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_347_R; [ TX_R_347_R ; ResponseViaActivity(R_233_RESP_B); ]; Array TX_R_348 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_348_R; [ TX_R_348_R ; ResponseViaActivity(R_234_RESP_A); ]; Array TX_R_349 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_349_R; [ TX_R_349_R ; ResponseViaActivity(R_235_RESP_A); ]; Array TX_R_350 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_350_R; [ TX_R_350_R ; ResponseViaActivity(R_236_RESP_A); ]; Array TX_R_351 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_351_R; [ TX_R_351_R ; ResponseViaActivity(R_237_RESP_A); ]; Array TX_R_352 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_352_R; [ TX_R_352_R ; ResponseViaActivity(R_237_RESP_B); ]; Array TX_R_353 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_353_R; [ TX_R_353_R ; ResponseViaActivity(R_238_RESP_A); ]; Array TX_R_354 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_354_R; [ TX_R_354_R ; ResponseViaActivity(R_239_RESP_A); ]; Array TX_R_355 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_355_R; [ TX_R_355_R ; ResponseViaActivity(R_240_RESP_A); ]; Array TX_R_356 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_356_R; [ TX_R_356_R ; ResponseViaActivity(R_241_RESP_A); ]; Array TX_R_357 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_357_R; [ TX_R_357_R ; ResponseViaActivity(R_241_RESP_B); ]; Array TX_R_358 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_358_R; [ TX_R_358_R ; ResponseViaActivity(R_242_RESP_A); ]; Array TX_R_359 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_359_R; [ TX_R_359_R ; ResponseViaActivity(R_243_RESP_A); ]; Array TX_R_360 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_360_R; [ TX_R_360_R ; ResponseViaActivity(R_244_RESP_A); ]; Array TX_R_361 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_361_R; [ TX_R_361_R ; ResponseViaActivity(R_245_RESP_A); ]; Array TX_R_362 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_362_R; [ TX_R_362_R ; ResponseViaActivity(R_245_RESP_B); ]; Array TX_R_363 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_363_R; [ TX_R_363_R ; ResponseViaActivity(R_246_RESP_A); ]; Array TX_R_364 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_364_R; [ TX_R_364_R ; ResponseViaActivity(R_247_RESP_A); ]; Array TX_R_365 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_365_R; [ TX_R_365_R ; ResponseViaActivity(R_248_RESP_A); ]; Array TX_R_366 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_366_R; [ TX_R_366_R ; ResponseViaActivity(R_249_RESP_A); ]; Array TX_R_367 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_367_R; [ TX_R_367_R ; ResponseViaActivity(R_251_RESP_A); ]; Array TX_R_368 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_368_R; [ TX_R_368_R ; ResponseViaActivity(R_252_RESP_A); ]; Array TX_R_369 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_369_R; [ TX_R_369_R ; ResponseViaActivity(R_253_RESP_A); ]; Array TX_R_370 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_370_R; [ TX_R_370_R ; ResponseViaActivity(R_253_RESP_B); ]; Array TX_R_371 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_371_R; [ TX_R_371_R ; ResponseViaActivity(R_254_RESP_A); ]; Array TX_R_372 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_372_R; [ TX_R_372_R ; ResponseViaActivity(R_255_RESP_A); ]; Array TX_R_373 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_373_R; [ TX_R_373_R ; ResponseViaActivity(R_256_RESP_A); ]; Array TX_R_374 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_374_R; [ TX_R_374_R ; ResponseViaActivity(R_257_RESP_A); ]; Array TX_R_375 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_375_R; [ TX_R_375_R ; ResponseViaActivity(R_258_RESP_A); ]; Array TX_R_376 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_376_R; [ TX_R_376_R ; ResponseViaActivity(R_259_RESP_A); ]; Array TX_R_377 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_377_R; [ TX_R_377_R ; ResponseViaActivity(R_259_RESP_B); ]; Array TX_R_378 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_378_R; [ TX_R_378_R ; ResponseViaActivity(R_260_RESP_A); ]; Array TX_R_379 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_379_R; [ TX_R_379_R ; ResponseViaActivity(R_260_RESP_B); ]; Array TX_R_380 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_380_R; [ TX_R_380_R ; ResponseViaActivity(R_261_RESP_A); ]; Array TX_R_381 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_381_R; [ TX_R_381_R ; ResponseViaActivity(R_261_RESP_B); ]; Array TX_R_382 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_382_R; [ TX_R_382_R ; ResponseViaActivity(R_262_RESP_A); ]; Array TX_R_383 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_383_R; [ TX_R_383_R ; ResponseViaActivity(R_263_RESP_A); ]; Array TX_R_384 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_384_R; [ TX_R_384_R ; ResponseViaActivity(R_263_RESP_B); ]; Array TX_R_385 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_385_R; [ TX_R_385_R ; ResponseViaActivity(R_264_RESP_A); ]; Array TX_R_386 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_386_R; [ TX_R_386_R ; ResponseViaActivity(R_265_RESP_A); ]; Array TX_R_387 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_387_R; [ TX_R_387_R ; ResponseViaActivity(R_266_RESP_A); ]; Array TX_R_388 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_388_R; [ TX_R_388_R ; ResponseViaActivity(R_267_RESP_A); ]; Array TX_R_389 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_389_R; [ TX_R_389_R ; ResponseViaActivity(R_268_RESP_A); ]; Array TX_R_390 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_390_R; [ TX_R_390_R ; ResponseViaActivity(R_269_RESP_A); ]; Array TX_R_391 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_391_R; [ TX_R_391_R ; ResponseViaActivity(R_269_RESP_B); ]; Array TX_R_392 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_392_R; [ TX_R_392_R ; ResponseViaActivity(R_270_RESP_A); ]; Array TX_R_393 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_393_R; [ TX_R_393_R ; ResponseViaActivity(R_271_RESP_A); ]; Array TX_R_394 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_394_R; [ TX_R_394_R ; ResponseViaActivity(R_271_RESP_B); ]; Array TX_R_395 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_395_R; [ TX_R_395_R ; ResponseViaActivity(R_272_RESP_A); ]; Array TX_R_396 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_396_R; [ TX_R_396_R ; ResponseViaActivity(R_273_RESP_A); ]; Array TX_R_397 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_397_R; [ TX_R_397_R ; ResponseViaActivity(R_274_RESP_A); ]; Array TX_R_398 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_398_R; [ TX_R_398_R ; ResponseViaActivity(R_275_RESP_A); ]; Array TX_R_399 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_399_R; [ TX_R_399_R ; ResponseViaActivity(R_285_RESP_A); ]; Array TX_R_400 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_400_R; [ TX_R_400_R ; ResponseViaActivity(R_289_RESP_A); ]; Array TX_R_401 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_401_R; [ TX_R_401_R ; ResponseViaActivity(R_291_RESP_A); ]; Array TX_R_402 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_402_R; [ TX_R_402_R ; ResponseViaActivity(R_169_RESP_A); ]; Array TX_R_403 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_403_R; [ TX_R_403_R ; ResponseViaActivity(R_174_RESP_A); ]; Array TX_R_404 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_404_R; [ TX_R_404_R ; ResponseViaActivity(R_305_RESP_A); ]; Array TX_R_405 --> CONSTANT_PACKED_TEXT_STORAGE TX_R_405_R; [ TX_R_405_R ; ResponseViaActivity(R_306_RESP_A); ]; [ R_TX_S_134 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[one of]Simply emitting a constant white light, unsympathetic to your situation.[or]Simply emitting a constant white light, unsympathetic to your situation.[paragraph break]Something looks wrong about the light, but you can't quite put your finger on it.[stopping]~"; rtrue; } #endif; ! DEBUG ! [1: ~[one of]Simply emitting a constant white light, unsympathetic to your situation.[or]Simply emitting a constant white light, unsympathetic to your situation.[paragraph break]Something looks wrong about the light, but you can't quite put your finger on it.[stopping]~] say__p=1;! [2: one of] ParaContent(); if (I7_ST_say_one_flag-->4 == false) { I7_ST_say_one_of-->4 = i7_soo_stop(I7_ST_say_one_of-->4, 2); I7_ST_say_one_flag-->4 = true; } if (say__comp == false) I7_ST_say_one_flag-->4 = false; switch ((I7_ST_say_one_of-->4)%(2+1)-1) { 0:! [3: ~Simply emitting a constant white light, unsympathetic to your situation.~] ParaContent(); print "Simply emitting a constant white light, unsympathetic to your situation.";! [4: or] ParaContent(); @nop; 1:! [5: ~Simply emitting a constant white light, unsympathetic to your situation.~] ParaContent(); print "Simply emitting a constant white light, unsympathetic to your situation.";! [6: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [7: ~Something looks wrong about the light, but you can't quite put your finger on it.~] ParaContent(); print "Something looks wrong about the light, but you can't quite put your finger on it.";! [8: stopping] ParaContent(); } .L_Say581; .L_SayX579;rtrue; ]; [ R_TX_S_135 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~It reads as follows: [line break][italic type]Pick up the receiver, I'll make you a believer[line break]Reach out and touch faith[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~It reads as follows: [line break][italic type]Pick up the receiver, I'll make you a believer[line break]Reach out and touch faith[roman type]~] say__p=1;! [2: ~It reads as follows: ~] ParaContent(); print "It reads as follows: ";! [3: line break] ParaContent(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~Pick up the receiver, I'll make you a believer~] ParaContent(); print "Pick up the receiver, I'll make you a believer";! [6: line break] ParaContent(); new_line;! [7: ~Reach out and touch faith~] ParaContent(); print "Reach out and touch faith";! [8: roman type] ParaContent(); style roman; .L_Say582; .L_SayX580;rtrue; ]; [ R_TX_S_136 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~It reads as follows: [line break][italic type]Hey you[line break]Out there all alone[line break]Standing naked by the phone[line break]Can you touch me?[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~It reads as follows: [line break][italic type]Hey you[line break]Out there all alone[line break]Standing naked by the phone[line break]Can you touch me?[roman type]~] say__p=1;! [2: ~It reads as follows: ~] ParaContent(); print "It reads as follows: ";! [3: line break] ParaContent(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~Hey you~] ParaContent(); print "Hey you";! [6: line break] ParaContent(); new_line;! [7: ~Out there all alone~] ParaContent(); print "Out there all alone";! [8: line break] ParaContent(); new_line;! [9: ~Standing naked by the phone~] ParaContent(); print "Standing naked by the phone";! [10: line break] ParaContent(); new_line;! [11: ~Can you touch me?~] ParaContent(); print "Can you touch me?";! [12: roman type] ParaContent(); style roman; .L_Say583; .L_SayX581;rtrue; ]; [ R_TX_S_137 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You flip through it quickly, and find writing only on the last page:[paragraph break][italic type]It could be just a membrane. Just a millimeter thick. Something I can poke with a finger and pop like a balloon. It might even be nothing more than an illusion. But my instinct, my fear, the feeling in the pit of my stomach, tells me I'm looking at a wall. No illusion, no curtain, but a wall.[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~You flip through it quickly, and find writing only on the last page:[paragraph break][italic type]It could be just a membrane. Just a millimeter thick. Something I can poke with a finger and pop like a balloon. It might even be nothing more than an illusion. But my instinct, my fear, the feeling in the pit of my stomach, tells me I'm looking at a wall. No illusion, no curtain, but a wall.[roman type]~] say__p=1;! [2: ~You flip through it quickly, and find writing only on the last page:~] ParaContent(); print "You flip through it quickly, and find writing only on the last page:";! [3: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~It could be just a membrane. Just a millimeter thick. Something I can poke with a finger and pop like a balloon. It might even be nothing more than an illusion. But my instinct, my fear, the feeling in the pit of my stomach, tells me I'm looking at a wall. No illusion, no curtain, but a wall.~] ParaContent(); print "It could be just a membrane. Just a millimeter thick. Something I can poke with a finger and pop like a balloon. It might even be nothing more than an illusion. But my instinct, my fear, the feeling in the pit of my stomach, tells me I'm looking at a wall. No illusion, no curtain, but a wall.";! [6: roman type] ParaContent(); style roman; .L_Say584; .L_SayX582;rtrue; ]; [ R_TX_S_138 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~The diagram has a detailed drawing of a bell on it, with some text scribbled off to the side:[line break][italic type]NEVER ring it. If you hear it, he can touch you.[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~The diagram has a detailed drawing of a bell on it, with some text scribbled off to the side:[line break][italic type]NEVER ring it. If you hear it, he can touch you.[roman type]~] say__p=1;! [2: ~The diagram has a detailed drawing of a bell on it, with some text scribbled off to the side:~] ParaContent(); print "The diagram has a detailed drawing of a bell on it, with some text scribbled off to the side:";! [3: line break] ParaContent(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~NEVER ring it. If you hear it, he can touch you.~] ParaContent(); print "NEVER ring it. If you hear it, he can touch you.";! [6: roman type] ParaContent(); style roman; .L_Say585; .L_SayX583;rtrue; ]; [ R_TX_S_139 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~The book is very short, and most of it is either blank or incomprehensible, except for one sentence in the middle:[line break][fixed letter spacing]Love the archons. If you hate them, they can touch you.[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~The book is very short, and most of it is either blank or incomprehensible, except for one sentence in the middle:[line break][fixed letter spacing]Love the archons. If you hate them, they can touch you.[roman type]~] say__p=1;! [2: ~The book is very short, and most of it is either blank or incomprehensible, except for one sentence in the middle:~] ParaContent(); print "The book is very short, and most of it is either blank or incomprehensible, except for one sentence in the middle:";! [3: line break] ParaContent(); new_line;! [4: fixed letter spacing] ParaContent(); font off;! [5: ~Love the archons. If you hate them, they can touch you.~] ParaContent(); print "Love the archons. If you hate them, they can touch you.";! [6: roman type] ParaContent(); style roman; .L_Say586; .L_SayX584;rtrue; ]; [ R_TX_S_140 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~It reads as follows:[line break][italic type]'Mr. Gorbachev, tear down this wall!'[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~It reads as follows:[line break][italic type]'Mr. Gorbachev, tear down this wall!'[roman type]~] say__p=1;! [2: ~It reads as follows:~] ParaContent(); print "It reads as follows:";! [3: line break] ParaContent(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~'Mr. Gorbachev, tear down this wall!'~] ParaContent(); print "~Mr. Gorbachev, tear down this wall!~";! [6: roman type] ParaContent(); style roman; .L_Say587; .L_SayX585;rtrue; ]; [ R_TX_S_141 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~It reads as follows:[line break][italic type]I talk to shadows from a lonely candle[line break]Reciting phrases from the wall[line break]I can't explain...[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~It reads as follows:[line break][italic type]I talk to shadows from a lonely candle[line break]Reciting phrases from the wall[line break]I can't explain...[roman type]~] say__p=1;! [2: ~It reads as follows:~] ParaContent(); print "It reads as follows:";! [3: line break] ParaContent(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~I talk to shadows from a lonely candle~] ParaContent(); print "I talk to shadows from a lonely candle";! [6: line break] ParaContent(); new_line;! [7: ~Reciting phrases from the wall~] ParaContent(); print "Reciting phrases from the wall";! [8: line break] ParaContent(); new_line;! [9: ~I can't explain...~] ParaContent(); print "I can't explain...";! [10: roman type] ParaContent(); style roman; .L_Say588; .L_SayX586;rtrue; ]; [ R_TX_S_142 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~It reads as follows:[line break][italic type]If you believe you are free, no escape is possible.[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~It reads as follows:[line break][italic type]If you believe you are free, no escape is possible.[roman type]~] say__p=1;! [2: ~It reads as follows:~] ParaContent(); print "It reads as follows:";! [3: line break] ParaContent(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~If you believe you are free, no escape is possible.~] ParaContent(); print "If you believe you are free, no escape is possible.";! [6: roman type] ParaContent(); style roman; .L_Say589; .L_SayX587;rtrue; ]; [ R_TX_S_143 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~It reads as follows:[paragraph break][italic type]Some people believe that at the edge of the physical universe is a big blank wall, surrounding the whole place. Others believe that those people are crazy.[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~It reads as follows:[paragraph break][italic type]Some people believe that at the edge of the physical universe is a big blank wall, surrounding the whole place. Others believe that those people are crazy.[roman type]~] say__p=1;! [2: ~It reads as follows:~] ParaContent(); print "It reads as follows:";! [3: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~Some people believe that at the edge of the physical universe is a big blank wall, surrounding the whole place. Others believe that those people are crazy.~] ParaContent(); print "Some people believe that at the edge of the physical universe is a big blank wall, surrounding the whole place. Others believe that those people are crazy.";! [6: roman type] ParaContent(); style roman; .L_Say590; .L_SayX588;rtrue; ]; [ R_TX_S_144 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~It reads as follows:[paragraph break][italic type]These notes sure are weird, aren't they? Maybe read them anyway. Sometimes the strangest things can be the difference between life and death.[roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~It reads as follows:[paragraph break][italic type]These notes sure are weird, aren't they? Maybe read them anyway. Sometimes the strangest things can be the difference between life and death.[roman type]~] say__p=1;! [2: ~It reads as follows:~] ParaContent(); print "It reads as follows:";! [3: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~These notes sure are weird, aren't they? Maybe read them anyway. Sometimes the strangest things can be the difference between life and death.~] ParaContent(); print "These notes sure are weird, aren't they? Maybe read them anyway. Sometimes the strangest things can be the difference between life and death.";! [6: roman type] ParaContent(); style roman; .L_Say591; .L_SayX589;rtrue; ]; [ R_TX_S_145 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~A small, printed slip of paper. Written on it is:[line break][italic type]Keypad code: [Code][roman type]~"; rtrue; } #endif; ! DEBUG ! [1: ~A small, printed slip of paper. Written on it is:[line break][italic type]Keypad code: [Code][roman type]~] say__p=1;! [2: ~A small, printed slip of paper. Written on it is:~] ParaContent(); print "A small, printed slip of paper. Written on it is:";! [3: line break] ParaContent(); new_line;! [4: italic type] ParaContent(); style underline;! [5: ~Keypad code: ~] ParaContent(); print "Keypad code: ";! [6: code] ParaContent(); print (say__n=(Global_Vars-->19));! [7: roman type] ParaContent(); style roman; .L_Say592; .L_SayX590;rtrue; ]; [ R_TX_S_146 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[if a thin key is nowhere and a wide key is nowhere]A block of ice sitting on a metal stool, with some gadgetry below the stool leading around to two vents blasting cold air at the ice. You can see a key frozen inside the block of ice.[otherwise]A small puddle on the stool is all that remains of the ice. The key formerly imprisoned within is now available.~"; rtrue; } #endif; ! DEBUG ! [1: ~[if a thin key is nowhere and a wide key is nowhere]A block of ice sitting on a metal stool, with some gadgetry below the stool leading around to two vents blasting cold air at the ice. You can see a key frozen inside the block of ice.[otherwise]A small puddle on the stool is all that remains of the ice. The key formerly imprisoned within is now available.~] say__p=1;! [2: if a thin key is nowhere and a wide key is nowhere] if (~~(((((LocationOf(I131_thin_key) == nothing))) && (((LocationOf(I146_wide_key) == nothing)))))) jump L_Say593;! [3: ~A block of ice sitting on a metal stool, with some gadgetry below the stool leading around to two vents blasting cold air at the ice. You can see a key frozen inside the block of ice.~] ParaContent(); print "A block of ice sitting on a metal stool, with some gadgetry below the stool leading around to two vents blasting cold air at the ice. You can see a key frozen inside the block of ice.";! [4: otherwise] jump L_SayX591; .L_Say593;! [5: ~A small puddle on the stool is all that remains of the ice. The key formerly imprisoned within is now available.~] ParaContent(); print "A small puddle on the stool is all that remains of the ice. The key formerly imprisoned within is now available."; .L_Say594; .L_SayX591;rtrue; ]; [ R_TX_S_147 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[if slide puzzle box is closed]A large wooden slide puzzle, guarding the way into the box. It's a 10x10 puzzle, with numbers 1 through 99 printed on it and mixed around and...[paragraph break]Yeah, you're not gonna try and solve this. There had better be some way to break this thing open.[otherwise]The top of the box has a nice hole punched in it, allowing you to see and remove the contents, along with slide puzzle pieces scattered across the desk and floor.~"; rtrue; } #endif; ! DEBUG ! [1: ~[if slide puzzle box is closed]A large wooden slide puzzle, guarding the way into the box. It's a 10x10 puzzle, with numbers 1 through 99 printed on it and mixed around and...[paragraph break]Yeah, you're not gonna try and solve this. There had better be some way to break this thing open.[otherwise]The top of the box has a nice hole punched in it, allowing you to see and remove the contents, along with slide puzzle pieces scattered across the desk and floor.~] say__p=1;! [2: if slide puzzle box is closed] if (~~(((((Adj_75_t1_v10(I161_slide_puzzle_box))))))) jump L_Say595;! [3: ~A large wooden slide puzzle, guarding the way into the box. It's a 10x10 puzzle, with numbers 1 through 99 printed on it and mixed around and...~] ParaContent(); print "A large wooden slide puzzle, guarding the way into the box. It's a 10x10 puzzle, with numbers 1 through 99 printed on it and mixed around and...";! [4: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [5: ~Yeah, you're not gonna try and solve this. There had better be some way to break this thing open.~] ParaContent(); print "Yeah, you're not gonna try and solve this. There had better be some way to break this thing open.";! [6: otherwise] jump L_SayX592; .L_Say595;! [7: ~The top of the box has a nice hole punched in it, allowing you to see and remove the contents, along with slide puzzle pieces scattered across the desk and floor.~] ParaContent(); print "The top of the box has a nice hole punched in it, allowing you to see and remove the contents, along with slide puzzle pieces scattered across the desk and floor."; .L_Say596; .L_SayX592;rtrue; ]; [ R_TX_S_148 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[if Screwed is less than 3]A solid wooden box with four screws set into the corners of the lid. You can guess how you might get this open.[otherwise]A solid wooden box that used to have four screws set into the corners of the lid, but you've got it open.~"; rtrue; } #endif; ! DEBUG ! [1: ~[if Screwed is less than 3]A solid wooden box with four screws set into the corners of the lid. You can guess how you might get this open.[otherwise]A solid wooden box that used to have four screws set into the corners of the lid, but you've got it open.~] say__p=1;! [2: if screwed is less than 3] if (~~(((((Global_Vars-->20) < 3))))) jump L_Say597;! [3: ~A solid wooden box with four screws set into the corners of the lid. You can guess how you might get this open.~] ParaContent(); print "A solid wooden box with four screws set into the corners of the lid. You can guess how you might get this open.";! [4: otherwise] jump L_SayX593; .L_Say597;! [5: ~A solid wooden box that used to have four screws set into the corners of the lid, but you've got it open.~] ParaContent(); print "A solid wooden box that used to have four screws set into the corners of the lid, but you've got it open."; .L_Say598; .L_SayX593;rtrue; ]; [ R_TX_S_149 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[one of]You find yourself standing in a very large, very dark area. The only light in the room comes from a bunch of spotlights set high up, maybe 50 feet off the floor. The floor is concrete, with yellow tape marking off the floor. High up, maybe 20 or 30 feet off the floor, you can see a room with a large window. There's light coming from behind the window, but you can't see who might be in it. [paragraph break]Shifting your gaze away, you see there's a staircase leading down from the room to the floor.[paragraph break]Behind you is the mysterious room you were just in. Above the 'room' is a bunch of complicated looking equipment and projectors, and a big white light several feet above the room. It must've been nothing more than a hologram... somehow...[or]This area seems to be designated for the hologram room, and is taped off from the stairwell accordingly.[stopping]~"; rtrue; } #endif; ! DEBUG ! [1: ~[one of]You find yourself standing in a very large, very dark area. The only light in the room comes from a bunch of spotlights set high up, maybe 50 feet off the floor. The floor is concrete, with yellow tape marking off the floor. High up, maybe 20 or 30 feet off the floor, you can see a room with a large window. There's light coming from behind the window, but you can't see who might be in it. [paragraph break]Shifting your gaze away, you see there's a staircase leading down from the room to the floor.[paragraph break]Behind you is the mysterious room you were just in. Above the 'room' is a bunch of complicated looking equipment and projectors, and a big white light several feet above the room. It must've been nothing more than a hologram... somehow...[or]This area seems to be designated for the hologram room, and is taped off from the stairwell accordingly.[stopping]~] say__p=1;! [2: one of] ParaContent(); if (I7_ST_say_one_flag-->5 == false) { I7_ST_say_one_of-->5 = i7_soo_stop(I7_ST_say_one_of-->5, 2); I7_ST_say_one_flag-->5 = true; } if (say__comp == false) I7_ST_say_one_flag-->5 = false; switch ((I7_ST_say_one_of-->5)%(2+1)-1) { 0:! [3: ~You find yourself standing in a very large, very dark area. The only light in the room comes from a bunch of spotlights set high up, maybe 50 feet off the floor. The floor is concrete, with yellow tape marking off the floor. High up, maybe 20 or 30 feet off the floor, you can see a room with a large window. There's light coming from behind the window, but you can't see who might be in it. ~] ParaContent(); print "You find yourself standing in a very large, very dark area. The only light in the room comes from a bunch of spotlights set high up, maybe 50 feet off the floor. The floor is concrete, with yellow tape marking off the floor. High up, maybe 20 or 30 feet off the floor, you can see a room with a large window. There's light coming from behind the window, but you can't see who might be in it. ";! [4: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [5: ~Shifting your gaze away, you see there's a staircase leading down from the room to the floor.~] ParaContent(); print "Shifting your gaze away, you see there's a staircase leading down from the room to the floor.";! [6: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [7: ~Behind you is the mysterious room you were just in. Above the 'room' is a bunch of complicated looking equipment and projectors, and a big white light several feet above the room. It must've been nothing more than a hologram... somehow...~] ParaContent(); print "Behind you is the mysterious room you were just in. Above the ~room~ is a bunch of complicated looking equipment and projectors, and a big white light several feet above the room. It must've been nothing more than a hologram... somehow...";! [8: or] ParaContent(); @nop; 1:! [9: ~This area seems to be designated for the hologram room, and is taped off from the stairwell accordingly.~] ParaContent(); print "This area seems to be designated for the hologram room, and is taped off from the stairwell accordingly.";! [10: stopping] ParaContent(); } .L_Say599; .L_SayX594;rtrue; ]; [ R_TX_S_150 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Yellow-and-black tape has been laid out around the floor, and it seems to stretch around the whole concrete area, in a line that extends from where the stairs end. There's a large square of tape around the 'room' you were in too.[paragraph break]The tape at the bottom of the stairs has a warning printed on it: 'DO NOT ENTER - TESTING IN PROGRESS'. Which was what you were doing, apparently.~"; rtrue; } #endif; ! DEBUG ! [1: ~Yellow-and-black tape has been laid out around the floor, and it seems to stretch around the whole concrete area, in a line that extends from where the stairs end. There's a large square of tape around the 'room' you were in too.[paragraph break]The tape at the bottom of the stairs has a warning printed on it: 'DO NOT ENTER - TESTING IN PROGRESS'. Which was what you were doing, apparently.~] say__p=1;! [2: ~Yellow-and-black tape has been laid out around the floor, and it seems to stretch around the whole concrete area, in a line that extends from where the stairs end. There's a large square of tape around the 'room' you were in too.~] ParaContent(); print "Yellow-and-black tape has been laid out around the floor, and it seems to stretch around the whole concrete area, in a line that extends from where the stairs end. There's a large square of tape around the ~room~ you were in too.";! [3: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [4: ~The tape at the bottom of the stairs has a warning printed on it: 'DO NOT ENTER - TESTING IN PROGRESS'. Which was what you were doing, apparently.~] ParaContent(); print "The tape at the bottom of the stairs has a warning printed on it: ~DO NOT ENTER - TESTING IN PROGRESS~. Which was what you were doing, apparently."; .L_Say600; .L_SayX595;rtrue; ]; [ R_TX_S_151 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can't even begin to understand what this equipment was doing. Well, you understand what it's FOR - creating illusory rooms and objects - but you have no idea how that's possible. Holograms aren't solid, after all. It's like something out of Star Trek... [paragraph break]Well, you don't need to understand why or how, you just need to get out of here.~"; rtrue; } #endif; ! DEBUG ! [1: ~You can't even begin to understand what this equipment was doing. Well, you understand what it's FOR - creating illusory rooms and objects - but you have no idea how that's possible. Holograms aren't solid, after all. It's like something out of Star Trek... [paragraph break]Well, you don't need to understand why or how, you just need to get out of here.~] say__p=1;! [2: ~You can't even begin to understand what this equipment was doing. Well, you understand what it's FOR - creating illusory rooms and objects - but you have no idea how that's possible. Holograms aren't solid, after all. It's like something out of Star Trek... ~] ParaContent(); print "You can't even begin to understand what this equipment was doing. Well, you understand what it's FOR - creating illusory rooms and objects - but you have no idea how that's possible. Holograms aren't solid, after all. It's like something out of Star Trek... ";! [3: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [4: ~Well, you don't need to understand why or how, you just need to get out of here.~] ParaContent(); print "Well, you don't need to understand why or how, you just need to get out of here."; .L_Say601; .L_SayX596;rtrue; ]; [ R_TX_S_152 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~A small platform separating the two staircases as they lead up toward the windowed room.[first time] The only light here comes from a yellow light pole, similar to the red-lit one lower down.[only]~"; rtrue; } #endif; ! DEBUG ! [1: ~A small platform separating the two staircases as they lead up toward the windowed room.[first time] The only light here comes from a yellow light pole, similar to the red-lit one lower down.[only]~] say__p=1;! [2: ~A small platform separating the two staircases as they lead up toward the windowed room.~] ParaContent(); print "A small platform separating the two staircases as they lead up toward the windowed room.";! [3: first time] ParaContent(); if ((say__comp == false) && ((I7_ST_say_first_time-->0)++ == 0)) {! [4: ~ The only light here comes from a yellow light pole, similar to the red-lit one lower down.~] ParaContent(); print " The only light here comes from a yellow light pole, similar to the red-lit one lower down.";! [5: only] ParaContent(); } .L_Say602; .L_SayX597;rtrue; ]; [ R_TX_S_153 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~A small platform, on the south side of the door to the windowed room. [first time]This is it. Now you'll find out whatever's going on here, who kidnapped you, why they kidnapped you, and how you'll escape from this place.[only]~"; rtrue; } #endif; ! DEBUG ! [1: ~A small platform, on the south side of the door to the windowed room. [first time]This is it. Now you'll find out whatever's going on here, who kidnapped you, why they kidnapped you, and how you'll escape from this place.[only]~] say__p=1;! [2: ~A small platform, on the south side of the door to the windowed room. ~] ParaContent(); print "A small platform, on the south side of the door to the windowed room. ";! [3: first time] ParaContent(); if ((say__comp == false) && ((I7_ST_say_first_time-->1)++ == 0)) {! [4: ~This is it. Now you'll find out whatever's going on here, who kidnapped you, why they kidnapped you, and how you'll escape from this place.~] ParaContent(); print "This is it. Now you'll find out whatever's going on here, who kidnapped you, why they kidnapped you, and how you'll escape from this place.";! [5: only] ParaContent(); } .L_Say603; .L_SayX598;rtrue; ]; [ R_TX_S_154 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~The other man looks like some kind of astronaut. He's decked out is some kind of gray spacesuit or hazmat looking thing for some reason, with the faceplate entirely opaque from your side. You can't see where he's looking, but you get the feeling it's right at you.[paragraph break]Then it hits you. Neither of these guys are at all surprised to see you in here. Well of course they aren't, they probably just watched you burst out of the hologram and come up the stairs, probably even unlocked the door for you. God, it was stupid of you to think you could get out of here that easily with a [italic type]windowed room[roman type] right above you.~"; rtrue; } #endif; ! DEBUG ! [1: ~The other man looks like some kind of astronaut. He's decked out is some kind of gray spacesuit or hazmat looking thing for some reason, with the faceplate entirely opaque from your side. You can't see where he's looking, but you get the feeling it's right at you.[paragraph break]Then it hits you. Neither of these guys are at all surprised to see you in here. Well of course they aren't, they probably just watched you burst out of the hologram and come up the stairs, probably even unlocked the door for you. God, it was stupid of you to think you could get out of here that easily with a [italic type]windowed room[roman type] right above you.~] say__p=1;! [2: ~The other man looks like some kind of astronaut. He's decked out is some kind of gray spacesuit or hazmat looking thing for some reason, with the faceplate entirely opaque from your side. You can't see where he's looking, but you get the feeling it's right at you.~] ParaContent(); print "The other man looks like some kind of astronaut. He's decked out is some kind of gray spacesuit or hazmat looking thing for some reason, with the faceplate entirely opaque from your side. You can't see where he's looking, but you get the feeling it's right at you.";! [3: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [4: ~Then it hits you. Neither of these guys are at all surprised to see you in here. Well of course they aren't, they probably just watched you burst out of the hologram and come up the stairs, probably even unlocked the door for you. God, it was stupid of you to think you could get out of here that easily with a ~] ParaContent(); print "Then it hits you. Neither of these guys are at all surprised to see you in here. Well of course they aren't, they probably just watched you burst out of the hologram and come up the stairs, probably even unlocked the door for you. God, it was stupid of you to think you could get out of here that easily with a ";! [5: italic type] ParaContent(); style underline;! [6: ~windowed room~] ParaContent(); print "windowed room";! [7: roman type] ParaContent(); style roman;! [8: ~ right above you.~] ParaContent(); print " right above you."; .L_Say604; .L_SayX599;rtrue; ]; [ R_TX_S_155 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[location]~"; rtrue; } #endif; ! DEBUG ! [1: ~[location]~] say__p=1;! [2: location] ParaContent(); PrintShortName(real_location); .L_Say605; .L_SayX600;rtrue; ]; [ R_TX_S_156 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[score]/[turn count]~"; rtrue; } #endif; ! DEBUG ! [1: ~[score]/[turn count]~] say__p=1;! [2: score] ParaContent(); print (say__n=score);! [3: ~/~] ParaContent(); print "/";! [4: turn count] ParaContent(); print (say__n=turns); .L_Say606; .L_SayX601;rtrue; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_0 x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & 'enterable'(x) & called='box'(thing)(x) & is('the location', ContainerOf(x)) ] [ Prop_1 x ! internal use only x_ix ! internal use only ; ; for (x=TestContainmentRange(real_location): x: x=TestContainmentRange(real_location,x)){ if ((x ofclass K2_thing) && ((Adj_71_t1_v10(x)))){ deferred_calling_list-->0 = x; rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_2 x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_3 x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & 'marked for listing'(x) ] [ Prop_4 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_67_t1_v10(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ thing(x) & 'marked for listing'(x) ] [ Prop_5 x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if (((Adj_67_t1_v10(x)))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! Abstraction for set of x such that: ! [ thing(x) & thing(x) & 'unmentioned'(x) ] [ Prop_6 reason ! Implied call parameter x ! internal use only x_ix ! internal use only total ! internal use only counter ! internal use only selection ! internal use only best ! internal use only best_with ! internal use only ; ; if (reason >= 0) { x = reason; reason = -1; } switch (reason) { -6: ! Find the extremal x satisfying: if (property_loop_sign>0) best=MIN_NEGATIVE_NUMBER; else best=MAX_POSITIVE_NUMBER; for (x=IK2_First: x: x=x.IK2_Link){ if ((x ofclass K2_thing) && ((Adj_70_t1_v10(x)))){ if (property_loop_sign>0) { if (x.property_to_be_totalled >= best) { best = x.property_to_be_totalled; best_with = x; } } else { if (x.property_to_be_totalled <= best) { best = x.property_to_be_totalled; best_with = x; } } } .NextOuterLoop_3; } return best_with; -5: ! Find a total property value over all x satisfying: for (x=IK2_First: x: x=x.IK2_Link){ if ((x ofclass K2_thing) && ((Adj_70_t1_v10(x)))){ total = total + x.property_to_be_totalled; jump NextOuterLoop_6; } .NextOuterLoop_6; } return total; -4: ! Find a random x satisfying: selection = -1; while (true) { counter = 0; for (x=IK2_First: x: x=x.IK2_Link){ if ((x ofclass K2_thing) && ((Adj_70_t1_v10(x)))){ counter++; if (counter == selection) return x; jump NextOuterLoop_7; } .NextOuterLoop_7; } if ((counter == 0) || (selection >= 0)) return nothing; selection = random(counter); } -3: ! How many x satisfy this? for (x=IK2_First: x: x=x.IK2_Link){ if ((x ofclass K2_thing) && ((Adj_70_t1_v10(x)))){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; -2: ! Find next x satisfying: if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ if ((x ofclass K2_thing) && ((Adj_70_t1_v10(x)))){ return x; } .NextOuterLoop_4; } return nothing; -1: ! True or false? if ((x ofclass K2_thing) && (x ofclass K2_thing) && ((Adj_70_t1_v10(x)))){ rtrue; } rfalse; } ]; ! Find next x satisfying: ! [ thing(x) & not-'handled'(x) & supporter(const_0) & provides(const_1, 'the property initial appearance') & is(const_2, SupporterOf(x)) ] [ Prop_7 const_0 ! Implied call parameter const_1 ! Implied call parameter const_2 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_2) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && (~~((Adj_64_t1_v10(x)))) && (const_0 ofclass K6_supporter) && (WhetherProvides(const_1, false, initial))){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & 'locale-supportable'(x) & is(const_0, SupporterOf(x)) ] [ Prop_8 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_41_t1_v10(x)))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, SupporterOf(x)) ] [ Prop_9 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & 'locale-supportable'(x) & is(const_0, SupporterOf(x)) ] [ Prop_10 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_41_t1_v10(x)))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, SupporterOf(x)) ] [ Prop_11 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & 'locale-supportable'(x) & is(const_0, SupporterOf(x)) ] [ Prop_12 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_41_t1_v10(x)))){ rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is(const_0, SupporterOf(x)) ] [ Prop_13 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & is('the actor', CarrierOf(x)) ] [ Prop_14 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; objectloop (x in actor) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Exists x : player's holdall(x) & called='current working sack'(player's holdall)(x) & is('actor', HolderOf(x)) ] [ Prop_15 x ! internal use only x_ix ! internal use only ; ; for (x=nothing: false: ){ if ((actor == HolderOf(x))){ deferred_calling_list-->0 = x; rtrue; } } rfalse; ]; ! Find next x satisfying: ! [ thing(x) & is('the actor', CarrierOf(x)) ] [ Prop_16 x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in actor) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! How many x satisfy this? ! [ thing(x) & is('the actor', CarrierOf(x)) ] [ Prop_17 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; objectloop (x in actor) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is(const_0, SupporterOf(x)) ] [ Prop_18 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only counter ! internal use only ; ; objectloop (x in const_0) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is(const_0, ContainerOf(x)) ] [ Prop_19 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only counter ! internal use only ; ; for (x=TestContainmentRange(const_0): x: x=TestContainmentRange(const_0,x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is('the second noun', SupporterOf(x)) ] [ Prop_20 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; objectloop (x in second) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is('the second noun', ContainerOf(x)) ] [ Prop_21 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; for (x=TestContainmentRange(second): x: x=TestContainmentRange(second,x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! True or false? ! [ Exists x : person(x) & called='owner'(person)(x) & NOT[ is(x, 'the actor') NOT] & encloses(x, 'noun') ] [ Prop_22 x ! internal use only x_ix ! internal use only ; ; for (x=IK8_First: x: x=x.IK8_Link){ if (~~((x == actor))){ if ((IndirectlyContains(x,noun))){ deferred_calling_list-->0 = x; rtrue; } } } rfalse; ]; ! How many x satisfy this? ! [ thing(x) & is('the noun', SupporterOf(x)) ] [ Prop_23 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; objectloop (x in noun) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is('the noun', ContainerOf(x)) ] [ Prop_24 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; for (x=TestContainmentRange(noun): x: x=TestContainmentRange(noun,x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ thing(x) ] [ Prop_25 x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; for (x=IK2_First: x: x=x.IK2_Link){ return x; .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('the noun', ContainerOf(x)) ] [ Prop_26 x ! internal use only x_ix ! internal use only ; ; for (x=TestContainmentRange(noun): x: x=TestContainmentRange(noun,x)){ if ((x ofclass K2_thing) && ((Adj_65_t1_v10(x)))){ if (~~(((Adj_61_t1_v10(x))))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & NOT[ is(x, 'the player') NOT] & is('the noun', ContainerOf(x)) ] [ Prop_27 x ! internal use only x_ix ! internal use only ; ; for (x=TestContainmentRange(noun): x: x=TestContainmentRange(noun,x)){ if ((x ofclass K2_thing)){ if (~~((x == player))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('the noun', SupporterOf(x)) ] [ Prop_28 x ! internal use only x_ix ! internal use only ; ; objectloop (x in noun) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_65_t1_v10(x)))){ if (~~(((Adj_61_t1_v10(x))))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & NOT[ is(x, 'the player') NOT] & is('the noun', SupporterOf(x)) ] [ Prop_29 x ! internal use only x_ix ! internal use only ; ; objectloop (x in noun) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing)){ if (~~((x == player))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('noun', ContainerOf(x)) ] [ Prop_30 x ! internal use only x_ix ! internal use only ; ; for (x=TestContainmentRange(noun): x: x=TestContainmentRange(noun,x)){ if ((x ofclass K2_thing) && ((Adj_65_t1_v10(x)))){ if (~~(((Adj_61_t1_v10(x))))){ rtrue; } } } rfalse; ]; ! True or false? ! [ Exists x : thing(x) & 'described'(x) & NOT[ 'scenery'(x) NOT] & is('noun', SupporterOf(x)) ] [ Prop_31 x ! internal use only x_ix ! internal use only ; ; objectloop (x in noun) if (SupporterOf(x)==parent(x)){ if ((x ofclass K2_thing) && ((Adj_65_t1_v10(x)))){ if (~~(((Adj_61_t1_v10(x))))){ rtrue; } } } rfalse; ]; ! How many x satisfy this? ! [ thing(x) & is('the actor', CarrierOf(x)) ] [ Prop_32 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; objectloop (x in actor) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! How many x satisfy this? ! [ thing(x) & is('the second noun', CarrierOf(x)) ] [ Prop_33 x ! internal use only x_ix ! internal use only counter ! internal use only ; ; objectloop (x in second) if (CarrierOf(x)==parent(x)){ if ((x ofclass K2_thing)){ counter++; jump NextOuterLoop_5; } .NextOuterLoop_5; } return counter; ]; ! Find next x satisfying: ! [ thing(x) & is('the player', OwnerOf(x)) ] [ Prop_34 x ! internal use only x_ix ! internal use only ; ; if (x_ix > 0) { x_ix--; jump NextOuterLoop_4; } if (x) jump NextOuterLoop_4; objectloop (x in player) if (OwnerOf(x)==parent(x)){ if ((x ofclass K2_thing)){ return x; } .NextOuterLoop_4; } return nothing; ]; ! True or false? ! [ Exists x : thing(x) & is(const_0, (RGuard_f0_2(x))) ] [ Prop_35 const_0 ! Implied call parameter x ! internal use only x_ix ! internal use only ; ; for (x=IK2_First: x: x=x.IK2_Link){ if ((const_0 == (RGuard_f0_2(x)))){ rtrue; } } rfalse; ]; Constant R_11_RESP_A = 1; Constant R_39_RESP_A = 2; Constant R_40_RESP_A = 3; Constant R_41_RESP_A = 4; Constant R_41_RESP_B = 5; Constant R_42_RESP_A = 6; Constant R_46_RESP_A = 7; Constant R_46_RESP_B = 8; Constant R_46_RESP_C = 9; Constant R_46_RESP_D = 10; Constant R_46_RESP_E = 11; Constant R_46_RESP_F = 12; Constant R_53_RESP_A = 13; Constant R_55_RESP_A = 14; Constant R_56_RESP_A = 15; Constant R_57_RESP_A = 16; Constant R_58_RESP_A = 17; Constant R_59_RESP_A = 18; Constant R_60_RESP_A = 19; Constant R_61_RESP_A = 20; Constant R_62_RESP_A = 21; Constant R_63_RESP_A = 22; Constant R_64_RESP_A = 23; Constant R_65_RESP_A = 24; Constant R_66_RESP_A = 25; Constant R_67_RESP_A = 26; Constant R_68_RESP_A = 27; Constant R_69_RESP_A = 28; Constant R_70_RESP_A = 29; Constant R_71_RESP_A = 30; Constant R_73_RESP_A = 31; Constant R_73_RESP_B = 32; Constant R_74_RESP_A = 33; Constant R_75_RESP_A = 34; Constant R_77_RESP_A = 35; Constant R_78_RESP_A = 36; Constant R_79_RESP_A = 37; Constant R_80_RESP_A = 38; Constant R_81_RESP_A = 39; Constant R_82_RESP_A = 40; Constant R_82_RESP_B = 41; Constant R_84_RESP_A = 42; Constant R_84_RESP_B = 43; Constant R_87_RESP_A = 44; Constant R_88_RESP_A = 45; Constant R_89_RESP_A = 46; Constant R_90_RESP_A = 47; Constant R_92_RESP_A = 48; Constant R_93_RESP_A = 49; Constant R_96_RESP_A = 50; Constant R_97_RESP_A = 51; Constant R_98_RESP_A = 52; Constant R_99_RESP_A = 53; Constant R_100_RESP_A = 54; Constant R_102_RESP_A = 55; Constant R_103_RESP_A = 56; Constant R_104_RESP_A = 57; Constant R_105_RESP_A = 58; Constant R_106_RESP_A = 59; Constant R_109_RESP_A = 60; Constant R_109_RESP_B = 61; Constant R_111_RESP_A = 62; Constant R_112_RESP_A = 63; Constant R_112_RESP_B = 64; Constant R_113_RESP_A = 65; Constant R_114_RESP_A = 66; Constant R_116_RESP_A = 67; Constant R_116_RESP_B = 68; Constant R_120_RESP_A = 69; Constant R_120_RESP_B = 70; Constant R_120_RESP_C = 71; Constant R_120_RESP_D = 72; Constant R_120_RESP_E = 73; Constant R_120_RESP_F = 74; Constant R_120_RESP_G = 75; Constant R_120_RESP_H = 76; Constant R_120_RESP_I = 77; Constant R_120_RESP_J = 78; Constant R_120_RESP_K = 79; Constant R_120_RESP_L = 80; Constant R_120_RESP_M = 81; Constant R_120_RESP_N = 82; Constant R_120_RESP_O = 83; Constant R_120_RESP_P = 84; Constant R_120_RESP_Q = 85; Constant R_120_RESP_R = 86; Constant R_120_RESP_S = 87; Constant R_124_RESP_A = 88; Constant R_124_RESP_B = 89; Constant R_125_RESP_A = 90; Constant R_125_RESP_B = 91; Constant R_125_RESP_C = 92; Constant R_125_RESP_D = 93; Constant R_126_RESP_A = 94; Constant R_127_RESP_A = 95; Constant R_127_RESP_B = 96; Constant R_128_RESP_A = 97; Constant R_129_RESP_A = 98; Constant R_129_RESP_B = 99; Constant R_129_RESP_C = 100; Constant R_129_RESP_D = 101; Constant R_129_RESP_E = 102; Constant R_131_RESP_A = 103; Constant R_131_RESP_B = 104; Constant R_131_RESP_C = 105; Constant R_131_RESP_D = 106; Constant R_134_RESP_A = 107; Constant R_135_RESP_A = 108; Constant R_138_RESP_A = 109; Constant R_138_RESP_B = 110; Constant R_138_RESP_C = 111; Constant R_140_RESP_A = 112; Constant R_142_RESP_A = 113; Constant R_146_RESP_A = 114; Constant R_146_RESP_B = 115; Constant R_146_RESP_C = 116; Constant R_147_RESP_A = 117; Constant R_150_RESP_A = 118; Constant R_152_RESP_A = 119; Constant R_153_RESP_A = 120; Constant R_153_RESP_B = 121; Constant R_154_RESP_A = 122; Constant R_155_RESP_A = 123; Constant R_156_RESP_A = 124; Constant R_157_RESP_A = 125; Constant R_158_RESP_A = 126; Constant R_159_RESP_A = 127; Constant R_160_RESP_A = 128; Constant R_161_RESP_A = 129; Constant R_162_RESP_A = 130; Constant R_162_RESP_B = 131; Constant R_163_RESP_A = 132; Constant R_163_RESP_B = 133; Constant R_164_RESP_A = 134; Constant R_165_RESP_A = 135; Constant R_165_RESP_B = 136; Constant R_166_RESP_A = 137; Constant R_167_RESP_A = 138; Constant R_168_RESP_A = 139; Constant R_169_RESP_A = 140; Constant R_171_RESP_A = 141; Constant R_171_RESP_B = 142; Constant R_172_RESP_A = 143; Constant R_173_RESP_A = 144; Constant R_174_RESP_A = 145; Constant R_176_RESP_A = 146; Constant R_176_RESP_B = 147; Constant R_177_RESP_A = 148; Constant R_178_RESP_A = 149; Constant R_180_RESP_A = 150; Constant R_181_RESP_A = 151; Constant R_182_RESP_A = 152; Constant R_184_RESP_A = 153; Constant R_185_RESP_A = 154; Constant R_186_RESP_A = 155; Constant R_187_RESP_A = 156; Constant R_189_RESP_A = 157; Constant R_190_RESP_A = 158; Constant R_190_RESP_B = 159; Constant R_190_RESP_C = 160; Constant R_191_RESP_A = 161; Constant R_192_RESP_A = 162; Constant R_194_RESP_A = 163; Constant R_194_RESP_B = 164; Constant R_194_RESP_C = 165; Constant R_195_RESP_A = 166; Constant R_196_RESP_A = 167; Constant R_197_RESP_A = 168; Constant R_199_RESP_A = 169; Constant R_199_RESP_B = 170; Constant R_200_RESP_A = 171; Constant R_201_RESP_A = 172; Constant R_203_RESP_A = 173; Constant R_203_RESP_B = 174; Constant R_204_RESP_A = 175; Constant R_205_RESP_A = 176; Constant R_206_RESP_A = 177; Constant R_207_RESP_A = 178; Constant R_208_RESP_A = 179; Constant R_209_RESP_A = 180; Constant R_211_RESP_A = 181; Constant R_211_RESP_B = 182; Constant R_211_RESP_C = 183; Constant R_212_RESP_A = 184; Constant R_214_RESP_A = 185; Constant R_215_RESP_A = 186; Constant R_216_RESP_A = 187; Constant R_217_RESP_A = 188; Constant R_218_RESP_A = 189; Constant R_219_RESP_A = 190; Constant R_220_RESP_A = 191; Constant R_221_RESP_A = 192; Constant R_222_RESP_A = 193; Constant R_223_RESP_A = 194; Constant R_224_RESP_A = 195; Constant R_225_RESP_A = 196; Constant R_228_RESP_A = 197; Constant R_228_RESP_B = 198; Constant R_229_RESP_A = 199; Constant R_229_RESP_B = 200; Constant R_230_RESP_A = 201; Constant R_230_RESP_B = 202; Constant R_230_RESP_C = 203; Constant R_231_RESP_A = 204; Constant R_231_RESP_B = 205; Constant R_232_RESP_A = 206; Constant R_233_RESP_A = 207; Constant R_233_RESP_B = 208; Constant R_234_RESP_A = 209; Constant R_235_RESP_A = 210; Constant R_236_RESP_A = 211; Constant R_237_RESP_A = 212; Constant R_237_RESP_B = 213; Constant R_238_RESP_A = 214; Constant R_239_RESP_A = 215; Constant R_240_RESP_A = 216; Constant R_241_RESP_A = 217; Constant R_241_RESP_B = 218; Constant R_242_RESP_A = 219; Constant R_243_RESP_A = 220; Constant R_244_RESP_A = 221; Constant R_245_RESP_A = 222; Constant R_245_RESP_B = 223; Constant R_246_RESP_A = 224; Constant R_247_RESP_A = 225; Constant R_248_RESP_A = 226; Constant R_249_RESP_A = 227; Constant R_251_RESP_A = 228; Constant R_252_RESP_A = 229; Constant R_253_RESP_A = 230; Constant R_253_RESP_B = 231; Constant R_254_RESP_A = 232; Constant R_255_RESP_A = 233; Constant R_256_RESP_A = 234; Constant R_257_RESP_A = 235; Constant R_258_RESP_A = 236; Constant R_259_RESP_A = 237; Constant R_259_RESP_B = 238; Constant R_260_RESP_A = 239; Constant R_260_RESP_B = 240; Constant R_261_RESP_A = 241; Constant R_261_RESP_B = 242; Constant R_262_RESP_A = 243; Constant R_263_RESP_A = 244; Constant R_263_RESP_B = 245; Constant R_264_RESP_A = 246; Constant R_265_RESP_A = 247; Constant R_266_RESP_A = 248; Constant R_267_RESP_A = 249; Constant R_268_RESP_A = 250; Constant R_269_RESP_A = 251; Constant R_269_RESP_B = 252; Constant R_270_RESP_A = 253; Constant R_271_RESP_A = 254; Constant R_271_RESP_B = 255; Constant R_272_RESP_A = 256; Constant R_273_RESP_A = 257; Constant R_274_RESP_A = 258; Constant R_275_RESP_A = 259; Constant R_276_RESP_A = 260; Constant R_277_RESP_A = 261; Constant R_278_RESP_A = 262; Constant R_279_RESP_A = 263; Constant R_285_RESP_A = 264; Constant R_287_RESP_A = 265; Constant R_289_RESP_A = 266; Constant R_291_RESP_A = 267; Constant R_292_RESP_A = 268; Constant R_293_RESP_A = 269; Constant R_298_RESP_A = 270; Constant R_305_RESP_A = 271; Constant R_306_RESP_A = 272; Constant R_313_RESP_A = 273; Constant R_315_RESP_A = 274; Constant R_315_RESP_B = 275; Constant R_322_RESP_A = 276; Constant R_323_RESP_A = 277; Constant R_325_RESP_A = 278; Constant R_326_RESP_A = 279; Constant R_329_RESP_A = 280; Constant R_330_RESP_A = 281; Constant R_331_RESP_A = 282; Constant R_332_RESP_A = 283; Constant R_333_RESP_A = 284; Constant R_333_RESP_B = 285; Constant R_333_RESP_C = 286; Constant R_333_RESP_D = 287; Constant R_333_RESP_E = 288; Constant R_333_RESP_F = 289; Constant R_333_RESP_G = 290; Constant R_333_RESP_H = 291; Constant R_333_RESP_I = 292; Constant R_333_RESP_J = 293; Constant R_333_RESP_K = 294; Constant R_333_RESP_L = 295; Constant R_333_RESP_M = 296; Constant R_333_RESP_N = 297; Constant R_333_RESP_O = 298; Constant R_333_RESP_P = 299; Constant R_333_RESP_Q = 300; Constant R_333_RESP_R = 301; Constant R_333_RESP_S = 302; Constant R_333_RESP_T = 303; Constant R_333_RESP_U = 304; Constant R_333_RESP_V = 305; Constant R_333_RESP_W = 306; Constant R_333_RESP_X = 307; Constant R_333_RESP_Y = 308; Constant R_334_RESP_A = 309; Constant R_334_RESP_B = 310; Constant R_334_RESP_C = 311; Constant R_334_RESP_D = 312; Constant R_334_RESP_E = 313; Constant R_334_RESP_F = 314; Constant R_334_RESP_G = 315; Constant R_334_RESP_H = 316; Constant R_334_RESP_I = 317; Constant R_334_RESP_J = 318; Constant R_334_RESP_K = 319; Constant R_335_RESP_A = 320; Constant R_335_RESP_B = 321; Constant R_335_RESP_C = 322; Constant R_335_RESP_D = 323; Constant R_335_RESP_E = 324; Constant R_335_RESP_F = 325; Constant R_335_RESP_G = 326; Constant R_335_RESP_H = 327; Constant R_335_RESP_I = 328; Constant R_335_RESP_J = 329; Constant R_335_RESP_K = 330; Constant R_335_RESP_L = 331; Constant R_335_RESP_M = 332; Constant R_335_RESP_N = 333; Constant R_335_RESP_O = 334; Constant R_335_RESP_P = 335; Constant R_335_RESP_Q = 336; Constant R_335_RESP_R = 337; Constant R_335_RESP_S = 338; Constant R_335_RESP_T = 339; Constant R_335_RESP_U = 340; Constant R_335_RESP_V = 341; Constant R_335_RESP_W = 342; Constant R_335_RESP_X = 343; Constant R_336_RESP_A = 344; Constant R_336_RESP_B = 345; Constant R_336_RESP_C = 346; Constant R_336_RESP_D = 347; Constant R_336_RESP_E = 348; Constant R_336_RESP_F = 349; Constant R_337_RESP_A = 350; Constant R_338_RESP_A = 351; Constant R_338_RESP_B = 352; Constant R_338_RESP_C = 353; Constant R_338_RESP_D = 354; Constant R_339_RESP_A = 355; Constant R_339_RESP_B = 356; Constant R_339_RESP_C = 357; Constant R_339_RESP_D = 358; Constant R_339_RESP_E = 359; Constant R_339_RESP_F = 360; Constant R_339_RESP_G = 361; Constant R_339_RESP_H = 362; Constant R_340_RESP_A = 363; Constant R_341_RESP_A = 364; Constant R_341_RESP_B = 365; Constant R_341_RESP_C = 366; Constant R_344_RESP_A = 367; Constant R_344_RESP_B = 368; Constant R_346_RESP_A = 369; Constant R_346_RESP_B = 370; Constant R_346_RESP_C = 371; Constant R_352_RESP_A = 372; Constant R_352_RESP_B = 373; Constant R_352_RESP_C = 374; Constant R_352_RESP_D = 375; Constant R_352_RESP_E = 376; Constant R_352_RESP_F = 377; Constant R_355_RESP_A = 378; Constant R_356_RESP_A = 379; Constant R_356_RESP_B = 380; Constant R_357_RESP_A = 381; Constant R_357_RESP_B = 382; Constant R_358_RESP_A = 383; Constant R_358_RESP_B = 384; Constant R_359_RESP_A = 385; Constant R_359_RESP_B = 386; Constant R_360_RESP_A = 387; Constant R_360_RESP_B = 388; Constant R_360_RESP_C = 389; Constant R_361_RESP_A = 390; Constant R_361_RESP_B = 391; Constant R_361_RESP_C = 392; Constant R_363_RESP_A = 393; Constant R_363_RESP_B = 394; Constant R_363_RESP_C = 395; Constant R_363_RESP_D = 396; Constant R_363_RESP_E = 397; Constant R_365_RESP_A = 398; Constant R_367_RESP_A = 399; Constant R_369_RESP_A = 400; Constant R_371_RESP_A = 401; Constant R_373_RESP_A = 402; Constant R_374_RESP_A = 403; Constant R_374_RESP_B = 404; Constant R_374_RESP_C = 405; Constant R_374_RESP_D = 406; Constant NO_RESPONSES = 406; Array ResponseTexts --> TX_S_157 TX_S_165 TX_S_168 TX_S_166 TX_S_167 TX_S_169 TX_S_170 TX_S_171 TX_S_172 TX_S_173 TX_S_174 TX_S_175 TX_S_176 TX_S_177 TX_S_178 TX_S_179 TX_S_180 TX_S_181 TX_S_182 TX_S_183 TX_S_184 TX_S_185 TX_S_186 TX_S_187 TX_S_188 TX_S_189 TX_S_190 TX_S_191 TX_S_192 TX_S_193 TX_S_194 TX_S_195 TX_S_196 TX_S_197 TX_S_199 TX_S_198 TX_S_200 TX_S_201 TX_S_202 TX_S_203 TX_S_204 TX_S_205 TX_S_206 TX_S_207 TX_S_208 TX_S_209 TX_S_210 TX_S_211 TX_S_212 TX_S_213 TX_S_214 TX_S_215 TX_S_216 TX_S_217 TX_S_218 TX_S_219 TX_S_220 TX_S_221 TX_S_222 TX_S_223 TX_S_224 TX_S_225 TX_S_226 TX_S_227 TX_S_228 TX_S_229 TX_S_230 TX_S_231 TX_S_232 TX_S_233 TX_S_234 TX_S_235 TX_S_236 TX_S_237 TX_S_238 TX_S_239 TX_S_240 TX_S_241 TX_S_242 TX_S_243 TX_S_244 TX_S_245 TX_S_246 TX_S_247 TX_S_248 TX_S_249 TX_S_250 TX_S_251 TX_S_252 TX_S_253 TX_S_254 TX_S_255 TX_S_256 TX_S_257 TX_S_258 TX_S_259 TX_S_260 TX_S_261 TX_S_262 TX_S_263 TX_S_264 TX_S_265 TX_S_266 TX_S_267 TX_S_268 TX_S_269 TX_S_270 TX_S_271 TX_S_272 TX_S_273 TX_S_274 TX_S_275 TX_S_276 TX_S_277 TX_S_278 TX_S_279 TX_S_280 TX_S_281 TX_S_282 TX_S_283 TX_S_284 TX_S_285 TX_S_286 TX_S_287 TX_S_288 TX_S_289 TX_S_290 TX_S_291 TX_S_292 TX_S_293 TX_S_294 TX_S_295 TX_S_296 TX_S_297 TX_S_298 TX_S_299 TX_S_300 TX_S_301 TX_S_302 TX_S_425 TX_S_304 TX_S_305 TX_S_306 TX_S_307 TX_S_426 TX_S_308 TX_S_309 TX_S_310 TX_S_311 TX_S_312 TX_S_313 TX_S_314 TX_S_315 TX_S_316 TX_S_317 TX_S_318 TX_S_319 TX_S_320 TX_S_321 TX_S_322 TX_S_323 TX_S_324 TX_S_325 TX_S_326 TX_S_327 TX_S_328 TX_S_329 TX_S_330 TX_S_331 TX_S_332 TX_S_333 TX_S_334 TX_S_335 TX_S_336 TX_S_337 TX_S_338 TX_S_339 TX_S_340 TX_S_341 TX_S_342 TX_S_343 TX_S_344 TX_S_345 TX_S_346 TX_S_347 TX_S_348 TX_S_349 TX_S_350 TX_S_351 TX_S_352 TX_S_353 TX_S_354 TX_S_355 TX_S_356 TX_S_357 TX_S_358 TX_S_359 TX_S_360 TX_S_361 TX_S_362 TX_S_363 TX_S_364 TX_S_365 TX_S_366 TX_S_367 TX_S_368 TX_S_369 TX_S_370 TX_S_371 TX_S_372 TX_S_373 TX_S_374 TX_S_375 TX_S_376 TX_S_377 TX_S_378 TX_S_379 TX_S_380 TX_S_381 TX_S_382 TX_S_383 TX_S_384 TX_S_385 TX_S_386 TX_S_387 TX_S_388 TX_S_389 TX_S_390 TX_S_391 TX_S_392 TX_S_393 TX_S_394 TX_S_395 TX_S_396 TX_S_397 TX_S_398 TX_S_399 TX_S_400 TX_S_401 TX_S_402 TX_S_403 TX_S_404 TX_S_405 TX_S_406 TX_S_407 TX_S_408 TX_S_409 TX_S_410 TX_S_411 TX_S_412 TX_S_413 TX_S_414 TX_S_415 TX_S_416 TX_S_417 TX_S_418 TX_S_419 TX_S_420 TX_S_421 TX_S_158 TX_S_159 TX_S_160 TX_S_161 TX_S_422 TX_S_303 TX_S_423 TX_S_424 TX_S_164 TX_S_163 TX_S_162 TX_S_427 TX_S_428 TX_S_0 TX_S_1 TX_S_2 TX_S_3 TX_S_4 TX_S_5 TX_S_6 TX_S_7 TX_S_8 TX_S_9 TX_S_10 TX_S_11 TX_S_12 TX_S_13 TX_S_14 TX_S_15 TX_S_16 TX_S_17 TX_S_18 TX_S_19 TX_S_20 TX_S_21 TX_S_22 TX_S_23 TX_S_24 TX_S_25 TX_S_26 TX_S_27 TX_S_28 TX_S_29 TX_S_30 TX_S_31 TX_S_32 TX_S_33 TX_S_34 TX_S_35 TX_S_36 TX_S_37 TX_S_38 TX_S_39 TX_S_40 TX_S_41 TX_S_42 TX_S_43 TX_S_44 TX_S_45 TX_S_46 TX_S_47 TX_S_48 TX_S_49 TX_S_50 TX_S_51 TX_S_52 TX_S_53 TX_S_54 TX_S_55 TX_S_56 TX_S_57 TX_S_58 TX_S_59 TX_S_60 TX_S_61 TX_S_62 TX_S_63 TX_S_64 TX_S_65 TX_S_66 TX_S_67 TX_S_68 TX_S_69 TX_S_70 TX_S_71 TX_S_72 TX_S_73 TX_S_74 TX_S_75 TX_S_76 TX_S_77 TX_S_78 TX_S_79 TX_S_80 TX_S_81 TX_S_82 TX_S_83 TX_S_84 TX_S_85 TX_S_86 TX_S_87 TX_S_88 TX_S_89 TX_S_90 TX_S_91 TX_S_92 TX_S_93 TX_S_94 TX_S_95 TX_S_96 TX_S_97 TX_S_98 TX_S_99 TX_S_100 TX_S_101 TX_S_102 TX_S_103 TX_S_104 TX_S_105 TX_S_106 TX_S_107 TX_S_108 TX_S_109 TX_S_110 TX_S_111 TX_S_112 TX_S_113 TX_S_114 TX_S_115 TX_S_116 TX_S_117 TX_S_118 TX_S_119 TX_S_120 TX_S_121 TX_S_122 TX_S_123 TX_S_124 TX_S_125 TX_S_126 TX_S_127 TX_S_128 TX_S_129 TX_S_130 TX_S_131 TX_S_132 TX_S_133 0 0; [ PrintResponse R ! Implied call parameter ; if (R == R_313_RESP_A) print (RulePrintingRule) ADJUST_LIGHT_R, " response (A)"; if (R == R_315_RESP_A) print (RulePrintingRule) GENERATE_ACTION_R, " response (A)"; if (R == R_315_RESP_B) print (RulePrintingRule) GENERATE_ACTION_R, " response (B)"; if (R == R_322_RESP_A) print (RulePrintingRule) BASIC_ACCESSIBILITY_R, " response (A)"; if (R == R_323_RESP_A) print (RulePrintingRule) BASIC_VISIBILITY_R, " response (A)"; if (R == R_325_RESP_A) print (RulePrintingRule) REQUESTED_ACTIONS_REQUIRE_R, " response (A)"; if (R == R_326_RESP_A) print (RulePrintingRule) CARRY_OUT_REQUESTED_ACTIONS_R, " response (A)"; if (R == R_329_RESP_A) print (RulePrintingRule) ACCESS_THROUGH_BARRIERS_R, " response (A)"; if (R == R_330_RESP_A) print (RulePrintingRule) CANT_REACH_INSIDE_CLOSED_R, " response (A)"; if (R == R_331_RESP_A) print (RulePrintingRule) CANT_REACH_INSIDE_ROOMS_R, " response (A)"; if (R == R_332_RESP_A) print (RulePrintingRule) CANT_REACH_OUTSIDE_CLOSED_R, " response (A)"; if (R == R_333_RESP_A) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (A)"; if (R == R_333_RESP_B) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (B)"; if (R == R_333_RESP_C) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (C)"; if (R == R_333_RESP_D) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (D)"; if (R == R_333_RESP_E) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (E)"; if (R == R_333_RESP_F) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (F)"; if (R == R_333_RESP_G) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (G)"; if (R == R_333_RESP_H) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (H)"; if (R == R_333_RESP_I) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (I)"; if (R == R_333_RESP_J) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (J)"; if (R == R_333_RESP_K) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (K)"; if (R == R_333_RESP_L) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (L)"; if (R == R_333_RESP_M) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (M)"; if (R == R_333_RESP_N) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (N)"; if (R == R_333_RESP_O) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (O)"; if (R == R_333_RESP_P) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (P)"; if (R == R_333_RESP_Q) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (Q)"; if (R == R_333_RESP_R) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (R)"; if (R == R_333_RESP_S) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (S)"; if (R == R_333_RESP_T) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (T)"; if (R == R_333_RESP_U) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (U)"; if (R == R_333_RESP_V) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (V)"; if (R == R_333_RESP_W) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (W)"; if (R == R_333_RESP_X) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (X)"; if (R == R_333_RESP_Y) print (RulePrintingRule) LIST_WRITER_INTERNAL_R, " response (Y)"; if (R == R_334_RESP_A) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (A)"; if (R == R_334_RESP_B) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (B)"; if (R == R_334_RESP_C) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (C)"; if (R == R_334_RESP_D) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (D)"; if (R == R_334_RESP_E) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (E)"; if (R == R_334_RESP_F) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (F)"; if (R == R_334_RESP_G) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (G)"; if (R == R_334_RESP_H) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (H)"; if (R == R_334_RESP_I) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (I)"; if (R == R_334_RESP_J) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (J)"; if (R == R_334_RESP_K) print (RulePrintingRule) ACTION_PROCESSING_INTERNAL_R, " response (K)"; if (R == R_335_RESP_A) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (A)"; if (R == R_335_RESP_B) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (B)"; if (R == R_335_RESP_C) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (C)"; if (R == R_335_RESP_D) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (D)"; if (R == R_335_RESP_E) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (E)"; if (R == R_335_RESP_F) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (F)"; if (R == R_335_RESP_G) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (G)"; if (R == R_335_RESP_H) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (H)"; if (R == R_335_RESP_I) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (I)"; if (R == R_335_RESP_J) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (J)"; if (R == R_335_RESP_K) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (K)"; if (R == R_335_RESP_L) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (L)"; if (R == R_335_RESP_M) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (M)"; if (R == R_335_RESP_N) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (N)"; if (R == R_335_RESP_O) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (O)"; if (R == R_335_RESP_P) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (P)"; if (R == R_335_RESP_Q) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (Q)"; if (R == R_335_RESP_R) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (R)"; if (R == R_335_RESP_S) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (S)"; if (R == R_335_RESP_T) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (T)"; if (R == R_335_RESP_U) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (U)"; if (R == R_335_RESP_V) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (V)"; if (R == R_335_RESP_W) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (W)"; if (R == R_335_RESP_X) print (RulePrintingRule) PARSER_ERROR_INTERNAL_R, " response (X)"; if (R == R_336_RESP_A) print (RulePrintingRule) PARSER_N_ERROR_INTERNAL_R, " response (A)"; if (R == R_336_RESP_B) print (RulePrintingRule) PARSER_N_ERROR_INTERNAL_R, " response (B)"; if (R == R_336_RESP_C) print (RulePrintingRule) PARSER_N_ERROR_INTERNAL_R, " response (C)"; if (R == R_336_RESP_D) print (RulePrintingRule) PARSER_N_ERROR_INTERNAL_R, " response (D)"; if (R == R_336_RESP_E) print (RulePrintingRule) PARSER_N_ERROR_INTERNAL_R, " response (E)"; if (R == R_336_RESP_F) print (RulePrintingRule) PARSER_N_ERROR_INTERNAL_R, " response (F)"; if (R == R_337_RESP_A) print (RulePrintingRule) DARKNESS_NAME_INTERNAL_R, " response (A)"; if (R == R_338_RESP_A) print (RulePrintingRule) PARSER_COMMAND_INTERNAL_R, " response (A)"; if (R == R_338_RESP_B) print (RulePrintingRule) PARSER_COMMAND_INTERNAL_R, " response (B)"; if (R == R_338_RESP_C) print (RulePrintingRule) PARSER_COMMAND_INTERNAL_R, " response (C)"; if (R == R_338_RESP_D) print (RulePrintingRule) PARSER_COMMAND_INTERNAL_R, " response (D)"; if (R == R_339_RESP_A) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (A)"; if (R == R_339_RESP_B) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (B)"; if (R == R_339_RESP_C) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (C)"; if (R == R_339_RESP_D) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (D)"; if (R == R_339_RESP_E) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (E)"; if (R == R_339_RESP_F) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (F)"; if (R == R_339_RESP_G) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (G)"; if (R == R_339_RESP_H) print (RulePrintingRule) PARSER_CLARIF_INTERNAL_R, " response (H)"; if (R == R_340_RESP_A) print (RulePrintingRule) YES_OR_NO_QUESTION_INTERNAL_R, " response (A)"; if (R == R_341_RESP_A) print (RulePrintingRule) PRINT_PROTAGONIST_INTERNAL_R, " response (A)"; if (R == R_341_RESP_B) print (RulePrintingRule) PRINT_PROTAGONIST_INTERNAL_R, " response (B)"; if (R == R_341_RESP_C) print (RulePrintingRule) PRINT_PROTAGONIST_INTERNAL_R, " response (C)"; if (R == R_344_RESP_A) print (RulePrintingRule) STANDARD_IMPLICIT_TAKING_R, " response (A)"; if (R == R_344_RESP_B) print (RulePrintingRule) STANDARD_IMPLICIT_TAKING_R, " response (B)"; if (R == R_346_RESP_A) print (RulePrintingRule) PRINT_OBITUARY_HEADLINE_R, " response (A)"; if (R == R_346_RESP_B) print (RulePrintingRule) PRINT_OBITUARY_HEADLINE_R, " response (B)"; if (R == R_346_RESP_C) print (RulePrintingRule) PRINT_OBITUARY_HEADLINE_R, " response (C)"; if (R == R_352_RESP_A) print (RulePrintingRule) IMMEDIATELY_UNDO_R, " response (A)"; if (R == R_352_RESP_B) print (RulePrintingRule) IMMEDIATELY_UNDO_R, " response (B)"; if (R == R_352_RESP_C) print (RulePrintingRule) IMMEDIATELY_UNDO_R, " response (C)"; if (R == R_352_RESP_D) print (RulePrintingRule) IMMEDIATELY_UNDO_R, " response (D)"; if (R == R_352_RESP_E) print (RulePrintingRule) IMMEDIATELY_UNDO_R, " response (E)"; if (R == R_352_RESP_F) print (RulePrintingRule) IMMEDIATELY_UNDO_R, " response (F)"; if (R == R_355_RESP_A) print (RulePrintingRule) QUIT_THE_GAME_R, " response (A)"; if (R == R_356_RESP_A) print (RulePrintingRule) SAVE_THE_GAME_R, " response (A)"; if (R == R_356_RESP_B) print (RulePrintingRule) SAVE_THE_GAME_R, " response (B)"; if (R == R_357_RESP_A) print (RulePrintingRule) RESTORE_THE_GAME_R, " response (A)"; if (R == R_357_RESP_B) print (RulePrintingRule) RESTORE_THE_GAME_R, " response (B)"; if (R == R_358_RESP_A) print (RulePrintingRule) RESTART_THE_GAME_R, " response (A)"; if (R == R_358_RESP_B) print (RulePrintingRule) RESTART_THE_GAME_R, " response (B)"; if (R == R_359_RESP_A) print (RulePrintingRule) VERIFY_THE_STORY_FILE_R, " response (A)"; if (R == R_359_RESP_B) print (RulePrintingRule) VERIFY_THE_STORY_FILE_R, " response (B)"; if (R == R_360_RESP_A) print (RulePrintingRule) SWITCH_TRANSCRIPT_ON_R, " response (A)"; if (R == R_360_RESP_B) print (RulePrintingRule) SWITCH_TRANSCRIPT_ON_R, " response (B)"; if (R == R_360_RESP_C) print (RulePrintingRule) SWITCH_TRANSCRIPT_ON_R, " response (C)"; if (R == R_361_RESP_A) print (RulePrintingRule) SWITCH_TRANSCRIPT_OFF_R, " response (A)"; if (R == R_361_RESP_B) print (RulePrintingRule) SWITCH_TRANSCRIPT_OFF_R, " response (B)"; if (R == R_361_RESP_C) print (RulePrintingRule) SWITCH_TRANSCRIPT_OFF_R, " response (C)"; if (R == R_363_RESP_A) print (RulePrintingRule) ANNOUNCE_SCORE_R, " response (A)"; if (R == R_363_RESP_B) print (RulePrintingRule) ANNOUNCE_SCORE_R, " response (B)"; if (R == R_363_RESP_C) print (RulePrintingRule) ANNOUNCE_SCORE_R, " response (C)"; if (R == R_363_RESP_D) print (RulePrintingRule) ANNOUNCE_SCORE_R, " response (D)"; if (R == R_363_RESP_E) print (RulePrintingRule) ANNOUNCE_SCORE_R, " response (E)"; if (R == R_365_RESP_A) print (RulePrintingRule) REP_PREFER_ABBREVIATED_R, " response (A)"; if (R == R_367_RESP_A) print (RulePrintingRule) REP_PREFER_UNABBREVIATED_R, " response (A)"; if (R == R_369_RESP_A) print (RulePrintingRule) REP_PREFER_SOMETIMES_ABBR_R, " response (A)"; if (R == R_371_RESP_A) print (RulePrintingRule) REP_SWITCH_NOTIFY_ON_R, " response (A)"; if (R == R_373_RESP_A) print (RulePrintingRule) REP_SWITCH_NOTIFY_OFF_R, " response (A)"; if (R == R_374_RESP_A) print (RulePrintingRule) ANNOUNCE_PRONOUN_MEANINGS_R, " response (A)"; if (R == R_374_RESP_B) print (RulePrintingRule) ANNOUNCE_PRONOUN_MEANINGS_R, " response (B)"; if (R == R_374_RESP_C) print (RulePrintingRule) ANNOUNCE_PRONOUN_MEANINGS_R, " response (C)"; if (R == R_374_RESP_D) print (RulePrintingRule) ANNOUNCE_PRONOUN_MEANINGS_R, " response (D)"; if (R == R_11_RESP_A) print (RulePrintingRule) R_22, " response (A)"; if (R == R_276_RESP_A) print (RulePrintingRule) R_817, " response (A)"; if (R == R_277_RESP_A) print (RulePrintingRule) R_818, " response (A)"; if (R == R_278_RESP_A) print (RulePrintingRule) R_819, " response (A)"; if (R == R_279_RESP_A) print (RulePrintingRule) R_820, " response (A)"; if (R == R_298_RESP_A) print (RulePrintingRule) R_843, " response (A)"; if (R == R_293_RESP_A) print (RulePrintingRule) R_838, " response (A)"; if (R == R_292_RESP_A) print (RulePrintingRule) R_837, " response (A)"; if (R == R_39_RESP_A) print (RulePrintingRule) R_77, " response (A)"; if (R == R_41_RESP_A) print (RulePrintingRule) R_79, " response (A)"; if (R == R_41_RESP_B) print (RulePrintingRule) R_79, " response (B)"; if (R == R_40_RESP_A) print (RulePrintingRule) R_78, " response (A)"; if (R == R_42_RESP_A) print (RulePrintingRule) R_80, " response (A)"; if (R == R_46_RESP_A) print (RulePrintingRule) R_86, " response (A)"; if (R == R_46_RESP_B) print (RulePrintingRule) R_86, " response (B)"; if (R == R_46_RESP_C) print (RulePrintingRule) R_86, " response (C)"; if (R == R_46_RESP_D) print (RulePrintingRule) R_86, " response (D)"; if (R == R_46_RESP_E) print (RulePrintingRule) R_86, " response (E)"; if (R == R_46_RESP_F) print (RulePrintingRule) R_86, " response (F)"; if (R == R_53_RESP_A) print (RulePrintingRule) R_93, " response (A)"; if (R == R_55_RESP_A) print (RulePrintingRule) R_96, " response (A)"; if (R == R_56_RESP_A) print (RulePrintingRule) R_97, " response (A)"; if (R == R_57_RESP_A) print (RulePrintingRule) R_98, " response (A)"; if (R == R_58_RESP_A) print (RulePrintingRule) R_99, " response (A)"; if (R == R_59_RESP_A) print (RulePrintingRule) R_100, " response (A)"; if (R == R_60_RESP_A) print (RulePrintingRule) R_101, " response (A)"; if (R == R_61_RESP_A) print (RulePrintingRule) R_102, " response (A)"; if (R == R_62_RESP_A) print (RulePrintingRule) R_103, " response (A)"; if (R == R_63_RESP_A) print (RulePrintingRule) R_104, " response (A)"; if (R == R_64_RESP_A) print (RulePrintingRule) R_105, " response (A)"; if (R == R_65_RESP_A) print (RulePrintingRule) R_106, " response (A)"; if (R == R_66_RESP_A) print (RulePrintingRule) R_107, " response (A)"; if (R == R_67_RESP_A) print (RulePrintingRule) R_108, " response (A)"; if (R == R_68_RESP_A) print (RulePrintingRule) R_109, " response (A)"; if (R == R_69_RESP_A) print (RulePrintingRule) R_110, " response (A)"; if (R == R_70_RESP_A) print (RulePrintingRule) R_111, " response (A)"; if (R == R_71_RESP_A) print (RulePrintingRule) R_112, " response (A)"; if (R == R_73_RESP_A) print (RulePrintingRule) R_114, " response (A)"; if (R == R_73_RESP_B) print (RulePrintingRule) R_114, " response (B)"; if (R == R_74_RESP_A) print (RulePrintingRule) R_115, " response (A)"; if (R == R_75_RESP_A) print (RulePrintingRule) R_116, " response (A)"; if (R == R_78_RESP_A) print (RulePrintingRule) R_119, " response (A)"; if (R == R_77_RESP_A) print (RulePrintingRule) R_118, " response (A)"; if (R == R_79_RESP_A) print (RulePrintingRule) R_120, " response (A)"; if (R == R_80_RESP_A) print (RulePrintingRule) R_121, " response (A)"; if (R == R_81_RESP_A) print (RulePrintingRule) R_122, " response (A)"; if (R == R_82_RESP_A) print (RulePrintingRule) R_123, " response (A)"; if (R == R_82_RESP_B) print (RulePrintingRule) R_123, " response (B)"; if (R == R_84_RESP_A) print (RulePrintingRule) R_125, " response (A)"; if (R == R_84_RESP_B) print (RulePrintingRule) R_125, " response (B)"; if (R == R_87_RESP_A) print (RulePrintingRule) R_128, " response (A)"; if (R == R_88_RESP_A) print (RulePrintingRule) R_129, " response (A)"; if (R == R_89_RESP_A) print (RulePrintingRule) R_130, " response (A)"; if (R == R_90_RESP_A) print (RulePrintingRule) R_131, " response (A)"; if (R == R_92_RESP_A) print (RulePrintingRule) R_133, " response (A)"; if (R == R_93_RESP_A) print (RulePrintingRule) R_134, " response (A)"; if (R == R_96_RESP_A) print (RulePrintingRule) R_137, " response (A)"; if (R == R_97_RESP_A) print (RulePrintingRule) R_138, " response (A)"; if (R == R_98_RESP_A) print (RulePrintingRule) R_139, " response (A)"; if (R == R_99_RESP_A) print (RulePrintingRule) R_140, " response (A)"; if (R == R_100_RESP_A) print (RulePrintingRule) R_141, " response (A)"; if (R == R_102_RESP_A) print (RulePrintingRule) R_143, " response (A)"; if (R == R_103_RESP_A) print (RulePrintingRule) R_144, " response (A)"; if (R == R_104_RESP_A) print (RulePrintingRule) R_145, " response (A)"; if (R == R_105_RESP_A) print (RulePrintingRule) R_146, " response (A)"; if (R == R_106_RESP_A) print (RulePrintingRule) R_147, " response (A)"; if (R == R_109_RESP_A) print (RulePrintingRule) R_150, " response (A)"; if (R == R_109_RESP_B) print (RulePrintingRule) R_150, " response (B)"; if (R == R_111_RESP_A) print (RulePrintingRule) R_152, " response (A)"; if (R == R_112_RESP_A) print (RulePrintingRule) R_153, " response (A)"; if (R == R_112_RESP_B) print (RulePrintingRule) R_153, " response (B)"; if (R == R_113_RESP_A) print (RulePrintingRule) R_154, " response (A)"; if (R == R_114_RESP_A) print (RulePrintingRule) R_155, " response (A)"; if (R == R_116_RESP_A) print (RulePrintingRule) R_157, " response (A)"; if (R == R_116_RESP_B) print (RulePrintingRule) R_157, " response (B)"; if (R == R_120_RESP_A) print (RulePrintingRule) R_161, " response (A)"; if (R == R_120_RESP_B) print (RulePrintingRule) R_161, " response (B)"; if (R == R_120_RESP_C) print (RulePrintingRule) R_161, " response (C)"; if (R == R_120_RESP_D) print (RulePrintingRule) R_161, " response (D)"; if (R == R_120_RESP_E) print (RulePrintingRule) R_161, " response (E)"; if (R == R_120_RESP_F) print (RulePrintingRule) R_161, " response (F)"; if (R == R_120_RESP_G) print (RulePrintingRule) R_161, " response (G)"; if (R == R_120_RESP_H) print (RulePrintingRule) R_161, " response (H)"; if (R == R_120_RESP_I) print (RulePrintingRule) R_161, " response (I)"; if (R == R_120_RESP_J) print (RulePrintingRule) R_161, " response (J)"; if (R == R_120_RESP_K) print (RulePrintingRule) R_161, " response (K)"; if (R == R_120_RESP_L) print (RulePrintingRule) R_161, " response (L)"; if (R == R_120_RESP_M) print (RulePrintingRule) R_161, " response (M)"; if (R == R_120_RESP_N) print (RulePrintingRule) R_161, " response (N)"; if (R == R_120_RESP_O) print (RulePrintingRule) R_161, " response (O)"; if (R == R_120_RESP_P) print (RulePrintingRule) R_161, " response (P)"; if (R == R_120_RESP_Q) print (RulePrintingRule) R_161, " response (Q)"; if (R == R_120_RESP_R) print (RulePrintingRule) R_161, " response (R)"; if (R == R_120_RESP_S) print (RulePrintingRule) R_161, " response (S)"; if (R == R_124_RESP_A) print (RulePrintingRule) R_165, " response (A)"; if (R == R_124_RESP_B) print (RulePrintingRule) R_165, " response (B)"; if (R == R_125_RESP_A) print (RulePrintingRule) R_166, " response (A)"; if (R == R_125_RESP_B) print (RulePrintingRule) R_166, " response (B)"; if (R == R_125_RESP_C) print (RulePrintingRule) R_166, " response (C)"; if (R == R_125_RESP_D) print (RulePrintingRule) R_166, " response (D)"; if (R == R_126_RESP_A) print (RulePrintingRule) R_167, " response (A)"; if (R == R_127_RESP_A) print (RulePrintingRule) R_168, " response (A)"; if (R == R_127_RESP_B) print (RulePrintingRule) R_168, " response (B)"; if (R == R_128_RESP_A) print (RulePrintingRule) R_169, " response (A)"; if (R == R_129_RESP_A) print (RulePrintingRule) R_170, " response (A)"; if (R == R_129_RESP_B) print (RulePrintingRule) R_170, " response (B)"; if (R == R_129_RESP_C) print (RulePrintingRule) R_170, " response (C)"; if (R == R_129_RESP_D) print (RulePrintingRule) R_170, " response (D)"; if (R == R_129_RESP_E) print (RulePrintingRule) R_170, " response (E)"; if (R == R_131_RESP_A) print (RulePrintingRule) R_172, " response (A)"; if (R == R_131_RESP_B) print (RulePrintingRule) R_172, " response (B)"; if (R == R_131_RESP_C) print (RulePrintingRule) R_172, " response (C)"; if (R == R_131_RESP_D) print (RulePrintingRule) R_172, " response (D)"; if (R == R_134_RESP_A) print (RulePrintingRule) R_176, " response (A)"; if (R == R_135_RESP_A) print (RulePrintingRule) R_177, " response (A)"; if (R == R_138_RESP_A) print (RulePrintingRule) R_180, " response (A)"; if (R == R_138_RESP_B) print (RulePrintingRule) R_180, " response (B)"; if (R == R_138_RESP_C) print (RulePrintingRule) R_180, " response (C)"; if (R == R_140_RESP_A) print (RulePrintingRule) R_182, " response (A)"; if (R == R_142_RESP_A) print (RulePrintingRule) R_184, " response (A)"; if (R == R_146_RESP_A) print (RulePrintingRule) R_188, " response (A)"; if (R == R_146_RESP_B) print (RulePrintingRule) R_188, " response (B)"; if (R == R_146_RESP_C) print (RulePrintingRule) R_188, " response (C)"; if (R == R_147_RESP_A) print (RulePrintingRule) R_189, " response (A)"; if (R == R_150_RESP_A) print (RulePrintingRule) R_192, " response (A)"; if (R == R_152_RESP_A) print (RulePrintingRule) R_194, " response (A)"; if (R == R_153_RESP_A) print (RulePrintingRule) R_195, " response (A)"; if (R == R_153_RESP_B) print (RulePrintingRule) R_195, " response (B)"; if (R == R_154_RESP_A) print (RulePrintingRule) R_196, " response (A)"; if (R == R_155_RESP_A) print (RulePrintingRule) R_197, " response (A)"; if (R == R_156_RESP_A) print (RulePrintingRule) R_198, " response (A)"; if (R == R_157_RESP_A) print (RulePrintingRule) R_199, " response (A)"; if (R == R_158_RESP_A) print (RulePrintingRule) R_200, " response (A)"; if (R == R_159_RESP_A) print (RulePrintingRule) R_201, " response (A)"; if (R == R_160_RESP_A) print (RulePrintingRule) R_202, " response (A)"; if (R == R_161_RESP_A) print (RulePrintingRule) R_203, " response (A)"; if (R == R_162_RESP_A) print (RulePrintingRule) R_204, " response (A)"; if (R == R_162_RESP_B) print (RulePrintingRule) R_204, " response (B)"; if (R == R_163_RESP_A) print (RulePrintingRule) R_205, " response (A)"; if (R == R_163_RESP_B) print (RulePrintingRule) R_205, " response (B)"; if (R == R_164_RESP_A) print (RulePrintingRule) R_206, " response (A)"; if (R == R_165_RESP_A) print (RulePrintingRule) R_207, " response (A)"; if (R == R_165_RESP_B) print (RulePrintingRule) R_207, " response (B)"; if (R == R_166_RESP_A) print (RulePrintingRule) R_208, " response (A)"; if (R == R_167_RESP_A) print (RulePrintingRule) R_209, " response (A)"; if (R == R_168_RESP_A) print (RulePrintingRule) R_210, " response (A)"; if (R == R_287_RESP_A) print (RulePrintingRule) R_830, " response (A)"; if (R == R_171_RESP_A) print (RulePrintingRule) R_213, " response (A)"; if (R == R_171_RESP_B) print (RulePrintingRule) R_213, " response (B)"; if (R == R_172_RESP_A) print (RulePrintingRule) R_214, " response (A)"; if (R == R_173_RESP_A) print (RulePrintingRule) R_215, " response (A)"; if (R == R_176_RESP_A) print (RulePrintingRule) R_218, " response (A)"; if (R == R_176_RESP_B) print (RulePrintingRule) R_218, " response (B)"; if (R == R_177_RESP_A) print (RulePrintingRule) R_219, " response (A)"; if (R == R_178_RESP_A) print (RulePrintingRule) R_220, " response (A)"; if (R == R_180_RESP_A) print (RulePrintingRule) R_222, " response (A)"; if (R == R_181_RESP_A) print (RulePrintingRule) R_223, " response (A)"; if (R == R_182_RESP_A) print (RulePrintingRule) R_224, " response (A)"; if (R == R_184_RESP_A) print (RulePrintingRule) R_226, " response (A)"; if (R == R_185_RESP_A) print (RulePrintingRule) R_227, " response (A)"; if (R == R_186_RESP_A) print (RulePrintingRule) R_228, " response (A)"; if (R == R_187_RESP_A) print (RulePrintingRule) R_229, " response (A)"; if (R == R_189_RESP_A) print (RulePrintingRule) R_231, " response (A)"; if (R == R_190_RESP_A) print (RulePrintingRule) R_232, " response (A)"; if (R == R_190_RESP_B) print (RulePrintingRule) R_232, " response (B)"; if (R == R_190_RESP_C) print (RulePrintingRule) R_232, " response (C)"; if (R == R_191_RESP_A) print (RulePrintingRule) R_233, " response (A)"; if (R == R_192_RESP_A) print (RulePrintingRule) R_234, " response (A)"; if (R == R_194_RESP_A) print (RulePrintingRule) R_236, " response (A)"; if (R == R_194_RESP_B) print (RulePrintingRule) R_236, " response (B)"; if (R == R_194_RESP_C) print (RulePrintingRule) R_236, " response (C)"; if (R == R_195_RESP_A) print (RulePrintingRule) R_237, " response (A)"; if (R == R_196_RESP_A) print (RulePrintingRule) R_238, " response (A)"; if (R == R_197_RESP_A) print (RulePrintingRule) R_239, " response (A)"; if (R == R_199_RESP_A) print (RulePrintingRule) R_241, " response (A)"; if (R == R_199_RESP_B) print (RulePrintingRule) R_241, " response (B)"; if (R == R_200_RESP_A) print (RulePrintingRule) R_243, " response (A)"; if (R == R_201_RESP_A) print (RulePrintingRule) R_244, " response (A)"; if (R == R_203_RESP_A) print (RulePrintingRule) R_246, " response (A)"; if (R == R_203_RESP_B) print (RulePrintingRule) R_246, " response (B)"; if (R == R_204_RESP_A) print (RulePrintingRule) R_247, " response (A)"; if (R == R_205_RESP_A) print (RulePrintingRule) R_248, " response (A)"; if (R == R_206_RESP_A) print (RulePrintingRule) R_249, " response (A)"; if (R == R_207_RESP_A) print (RulePrintingRule) R_250, " response (A)"; if (R == R_208_RESP_A) print (RulePrintingRule) R_251, " response (A)"; if (R == R_209_RESP_A) print (RulePrintingRule) R_252, " response (A)"; if (R == R_211_RESP_A) print (RulePrintingRule) R_254, " response (A)"; if (R == R_211_RESP_B) print (RulePrintingRule) R_254, " response (B)"; if (R == R_211_RESP_C) print (RulePrintingRule) R_254, " response (C)"; if (R == R_212_RESP_A) print (RulePrintingRule) R_255, " response (A)"; if (R == R_214_RESP_A) print (RulePrintingRule) R_257, " response (A)"; if (R == R_215_RESP_A) print (RulePrintingRule) R_258, " response (A)"; if (R == R_216_RESP_A) print (RulePrintingRule) R_259, " response (A)"; if (R == R_217_RESP_A) print (RulePrintingRule) R_260, " response (A)"; if (R == R_218_RESP_A) print (RulePrintingRule) R_261, " response (A)"; if (R == R_219_RESP_A) print (RulePrintingRule) R_262, " response (A)"; if (R == R_220_RESP_A) print (RulePrintingRule) R_263, " response (A)"; if (R == R_221_RESP_A) print (RulePrintingRule) R_264, " response (A)"; if (R == R_222_RESP_A) print (RulePrintingRule) R_265, " response (A)"; if (R == R_223_RESP_A) print (RulePrintingRule) R_266, " response (A)"; if (R == R_224_RESP_A) print (RulePrintingRule) R_267, " response (A)"; if (R == R_225_RESP_A) print (RulePrintingRule) R_268, " response (A)"; if (R == R_228_RESP_A) print (RulePrintingRule) R_271, " response (A)"; if (R == R_228_RESP_B) print (RulePrintingRule) R_271, " response (B)"; if (R == R_229_RESP_A) print (RulePrintingRule) R_272, " response (A)"; if (R == R_229_RESP_B) print (RulePrintingRule) R_272, " response (B)"; if (R == R_230_RESP_A) print (RulePrintingRule) R_273, " response (A)"; if (R == R_230_RESP_B) print (RulePrintingRule) R_273, " response (B)"; if (R == R_230_RESP_C) print (RulePrintingRule) R_273, " response (C)"; if (R == R_231_RESP_A) print (RulePrintingRule) R_274, " response (A)"; if (R == R_231_RESP_B) print (RulePrintingRule) R_274, " response (B)"; if (R == R_232_RESP_A) print (RulePrintingRule) R_275, " response (A)"; if (R == R_233_RESP_A) print (RulePrintingRule) R_276, " response (A)"; if (R == R_233_RESP_B) print (RulePrintingRule) R_276, " response (B)"; if (R == R_234_RESP_A) print (RulePrintingRule) R_277, " response (A)"; if (R == R_235_RESP_A) print (RulePrintingRule) R_278, " response (A)"; if (R == R_236_RESP_A) print (RulePrintingRule) R_279, " response (A)"; if (R == R_237_RESP_A) print (RulePrintingRule) R_280, " response (A)"; if (R == R_237_RESP_B) print (RulePrintingRule) R_280, " response (B)"; if (R == R_238_RESP_A) print (RulePrintingRule) R_281, " response (A)"; if (R == R_239_RESP_A) print (RulePrintingRule) R_282, " response (A)"; if (R == R_240_RESP_A) print (RulePrintingRule) R_283, " response (A)"; if (R == R_241_RESP_A) print (RulePrintingRule) R_284, " response (A)"; if (R == R_241_RESP_B) print (RulePrintingRule) R_284, " response (B)"; if (R == R_242_RESP_A) print (RulePrintingRule) R_285, " response (A)"; if (R == R_243_RESP_A) print (RulePrintingRule) R_286, " response (A)"; if (R == R_244_RESP_A) print (RulePrintingRule) R_287, " response (A)"; if (R == R_245_RESP_A) print (RulePrintingRule) R_288, " response (A)"; if (R == R_245_RESP_B) print (RulePrintingRule) R_288, " response (B)"; if (R == R_246_RESP_A) print (RulePrintingRule) R_289, " response (A)"; if (R == R_247_RESP_A) print (RulePrintingRule) R_290, " response (A)"; if (R == R_248_RESP_A) print (RulePrintingRule) R_291, " response (A)"; if (R == R_249_RESP_A) print (RulePrintingRule) R_292, " response (A)"; if (R == R_251_RESP_A) print (RulePrintingRule) R_294, " response (A)"; if (R == R_252_RESP_A) print (RulePrintingRule) R_295, " response (A)"; if (R == R_253_RESP_A) print (RulePrintingRule) R_296, " response (A)"; if (R == R_253_RESP_B) print (RulePrintingRule) R_296, " response (B)"; if (R == R_254_RESP_A) print (RulePrintingRule) R_297, " response (A)"; if (R == R_255_RESP_A) print (RulePrintingRule) R_298, " response (A)"; if (R == R_256_RESP_A) print (RulePrintingRule) R_299, " response (A)"; if (R == R_257_RESP_A) print (RulePrintingRule) R_300, " response (A)"; if (R == R_258_RESP_A) print (RulePrintingRule) R_301, " response (A)"; if (R == R_259_RESP_A) print (RulePrintingRule) R_302, " response (A)"; if (R == R_259_RESP_B) print (RulePrintingRule) R_302, " response (B)"; if (R == R_260_RESP_A) print (RulePrintingRule) R_303, " response (A)"; if (R == R_260_RESP_B) print (RulePrintingRule) R_303, " response (B)"; if (R == R_261_RESP_A) print (RulePrintingRule) R_304, " response (A)"; if (R == R_261_RESP_B) print (RulePrintingRule) R_304, " response (B)"; if (R == R_262_RESP_A) print (RulePrintingRule) R_305, " response (A)"; if (R == R_263_RESP_A) print (RulePrintingRule) R_306, " response (A)"; if (R == R_263_RESP_B) print (RulePrintingRule) R_306, " response (B)"; if (R == R_264_RESP_A) print (RulePrintingRule) R_307, " response (A)"; if (R == R_265_RESP_A) print (RulePrintingRule) R_308, " response (A)"; if (R == R_266_RESP_A) print (RulePrintingRule) R_309, " response (A)"; if (R == R_267_RESP_A) print (RulePrintingRule) R_310, " response (A)"; if (R == R_268_RESP_A) print (RulePrintingRule) R_311, " response (A)"; if (R == R_269_RESP_A) print (RulePrintingRule) R_312, " response (A)"; if (R == R_269_RESP_B) print (RulePrintingRule) R_312, " response (B)"; if (R == R_270_RESP_A) print (RulePrintingRule) R_313, " response (A)"; if (R == R_271_RESP_A) print (RulePrintingRule) R_314, " response (A)"; if (R == R_271_RESP_B) print (RulePrintingRule) R_314, " response (B)"; if (R == R_272_RESP_A) print (RulePrintingRule) R_315, " response (A)"; if (R == R_273_RESP_A) print (RulePrintingRule) R_316, " response (A)"; if (R == R_274_RESP_A) print (RulePrintingRule) R_317, " response (A)"; if (R == R_275_RESP_A) print (RulePrintingRule) R_805, " response (A)"; if (R == R_285_RESP_A) print (RulePrintingRule) R_827, " response (A)"; if (R == R_289_RESP_A) print (RulePrintingRule) R_832, " response (A)"; if (R == R_291_RESP_A) print (RulePrintingRule) R_835, " response (A)"; if (R == R_169_RESP_A) print (RulePrintingRule) R_211, " response (A)"; if (R == R_174_RESP_A) print (RulePrintingRule) R_216, " response (A)"; if (R == R_305_RESP_A) print (RulePrintingRule) R_850, " response (A)"; if (R == R_306_RESP_A) print (RulePrintingRule) R_851, " response (A)"; ]; [ STANDARD_RESPONSE_ISSUING_R ; RegardingSingleObject(); TEXT_TY_Say(ResponseTexts-->(parameter_value-1)); ]; Array ResponseDivisions --> "Standard Rules" 1 258 EMPTY_TEXT_PACKED 273 405 "Basic Screen Effects by Emily Short" 259 259 "Locksmith by Emily Short" 260 272 0 0 0; [ R_TX_S_0 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[It] [are] [if story tense is present tense]now [end if]pitch dark in [if story tense is present tense]here[else]there[end if]!~"; rtrue; } #endif; ! DEBUG ! [1: ~[It] [are] [if story tense is present tense]now [end if]pitch dark in [if story tense is present tense]here[else]there[end if]!~] say__p=1;! [2: it] ParaContent(); (PHR_789_r37 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say607;! [7: ~now ~] ParaContent(); print "now ";! [8: end if] .L_Say607; .L_SayX602;! [9: ~pitch dark in ~] ParaContent(); print "pitch dark in ";! [10: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say608;! [11: ~here~] ParaContent(); print "here";! [12: else] jump L_SayX603; .L_Say608;! [13: ~there~] ParaContent(); print "there";! [14: end if] .L_Say609; .L_SayX603;! [15: ~!~] ParaContent(); print "!"; .L_Say610; .L_SayX604;rtrue; ]; Array TX_S_0 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_0; [ R_TX_S_1 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(considering the first sixteen objects only)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(considering the first sixteen objects only)[command clarification break]~] say__p=1;! [2: ~(considering the first sixteen objects only)~] ParaContent(); print "(considering the first sixteen objects only)";! [3: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say611; .L_SayX605;rtrue; ]; Array TX_S_1 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_1; [ R_TX_S_2 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Nothing to do!~"; rtrue; } #endif; ! DEBUG ! [1: ~Nothing to do!~] say__p=1;! [2: ~Nothing to do!~] ParaContent(); print "Nothing to do!"; .L_Say612; .L_SayX606;rtrue; ]; Array TX_S_2 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_2; [ R_TX_S_3 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You must name something more substantial.~"; rtrue; } #endif; ! DEBUG ! [1: ~You must name something more substantial.~] say__p=1;! [2: ~You must name something more substantial.~] ParaContent(); print "You must name something more substantial."; .L_Say613; .L_SayX607;rtrue; ]; Array TX_S_3 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_3; [ R_TX_S_4 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[It] [are] pitch dark, and [we] [can't see] a thing.~"; rtrue; } #endif; ! DEBUG ! [1: ~[It] [are] pitch dark, and [we] [can't see] a thing.~] say__p=1;! [2: it] ParaContent(); (PHR_789_r37 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ pitch dark, and ~] ParaContent(); print " pitch dark, and ";! [6: we] ParaContent(); (PHR_763_r11 ());! [7: ~ ~] ParaContent(); print " ";! [8: can't see] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_16); say__p=1; ! [9: ~ a thing.~] ParaContent(); print " a thing."; .L_Say614; .L_SayX608;rtrue; ]; Array TX_S_4 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_4; [ R_TX_S_5 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [have] better things to do.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [have] better things to do.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: have] ConjugateVerb_2(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ better things to do.~] ParaContent(); print " better things to do."; .L_Say615; .L_SayX609;rtrue; ]; Array TX_S_5 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_5; [ R_TX_S_6 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [are] unable to do that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [are] unable to do that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ unable to do that.~] ParaContent(); print " unable to do that."; .L_Say616; .L_SayX610;rtrue; ]; Array TX_S_6 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_6; [ R_TX_S_7 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [aren't] available.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [aren't] available.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ available.~] ParaContent(); print " available."; .L_Say617; .L_SayX611;rtrue; ]; Array TX_S_7 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_7; [ R_TX_S_8 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [aren't] open.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [aren't] open.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ open.~] ParaContent(); print " open."; .L_Say618; .L_SayX612;rtrue; ]; Array TX_S_8 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_8; [ R_TX_S_9 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't] reach into [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't] reach into [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't] ConjugateVerb_77(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ reach into ~] ParaContent(); print " reach into ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say619; .L_SayX613;rtrue; ]; Array TX_S_9 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_9; [ R_TX_S_10 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [aren't] open.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [aren't] open.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ open.~] ParaContent(); print " open."; .L_Say620; .L_SayX614;rtrue; ]; Array TX_S_10 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_10; [ R_TX_S_11 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ (~"; rtrue; } #endif; ! DEBUG ! [1: ~ (~] say__p=1;! [2: ~ (~] ParaContent(); print " ("; .L_Say621; .L_SayX615;rtrue; ]; Array TX_S_11 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_11; [ R_TX_S_12 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~)~"; rtrue; } #endif; ! DEBUG ! [1: ~)~] say__p=1;! [2: ~)~] ParaContent(); print ")"; .L_Say622; .L_SayX616;rtrue; ]; Array TX_S_12 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_12; [ R_TX_S_13 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ and ~"; rtrue; } #endif; ! DEBUG ! [1: ~ and ~] say__p=1;! [2: ~ and ~] ParaContent(); print " and "; .L_Say623; .L_SayX617;rtrue; ]; Array TX_S_13 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_13; [ R_TX_S_14 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~providing light~"; rtrue; } #endif; ! DEBUG ! [1: ~providing light~] say__p=1;! [2: ~providing light~] ParaContent(); print "providing light"; .L_Say624; .L_SayX618;rtrue; ]; Array TX_S_14 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_14; [ R_TX_S_15 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~closed~"; rtrue; } #endif; ! DEBUG ! [1: ~closed~] say__p=1;! [2: ~closed~] ParaContent(); print "closed"; .L_Say625; .L_SayX619;rtrue; ]; Array TX_S_15 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_15; [ R_TX_S_16 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~empty~"; rtrue; } #endif; ! DEBUG ! [1: ~empty~] say__p=1;! [2: ~empty~] ParaContent(); print "empty"; .L_Say626; .L_SayX620;rtrue; ]; Array TX_S_16 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_16; [ R_TX_S_17 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~closed and empty~"; rtrue; } #endif; ! DEBUG ! [1: ~closed and empty~] say__p=1;! [2: ~closed and empty~] ParaContent(); print "closed and empty"; .L_Say627; .L_SayX621;rtrue; ]; Array TX_S_17 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_17; [ R_TX_S_18 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~closed and providing light~"; rtrue; } #endif; ! DEBUG ! [1: ~closed and providing light~] say__p=1;! [2: ~closed and providing light~] ParaContent(); print "closed and providing light"; .L_Say628; .L_SayX622;rtrue; ]; Array TX_S_18 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_18; [ R_TX_S_19 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~empty and providing light~"; rtrue; } #endif; ! DEBUG ! [1: ~empty and providing light~] say__p=1;! [2: ~empty and providing light~] ParaContent(); print "empty and providing light"; .L_Say629; .L_SayX623;rtrue; ]; Array TX_S_19 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_19; [ R_TX_S_20 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~closed, empty[if serial comma option is active],[end if] and providing light~"; rtrue; } #endif; ! DEBUG ! [1: ~closed, empty[if serial comma option is active],[end if] and providing light~] say__p=1;! [2: ~closed, empty~] ParaContent(); print "closed, empty";! [3: if serial comma option is active] if (~~(((((Adj_25_t1_v16(6))))))) jump L_Say630;! [4: ~,~] ParaContent(); print ",";! [5: end if] .L_Say630; .L_SayX624;! [6: ~ and providing light~] ParaContent(); print " and providing light"; .L_Say631; .L_SayX625;rtrue; ]; Array TX_S_20 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_20; [ R_TX_S_21 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~providing light and being worn~"; rtrue; } #endif; ! DEBUG ! [1: ~providing light and being worn~] say__p=1;! [2: ~providing light and being worn~] ParaContent(); print "providing light and being worn"; .L_Say632; .L_SayX626;rtrue; ]; Array TX_S_21 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_21; [ R_TX_S_22 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~being worn~"; rtrue; } #endif; ! DEBUG ! [1: ~being worn~] say__p=1;! [2: ~being worn~] ParaContent(); print "being worn"; .L_Say633; .L_SayX627;rtrue; ]; Array TX_S_22 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_22; [ R_TX_S_23 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~open~"; rtrue; } #endif; ! DEBUG ! [1: ~open~] say__p=1;! [2: ~open~] ParaContent(); print "open"; .L_Say634; .L_SayX628;rtrue; ]; Array TX_S_23 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_23; [ R_TX_S_24 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~open but empty~"; rtrue; } #endif; ! DEBUG ! [1: ~open but empty~] say__p=1;! [2: ~open but empty~] ParaContent(); print "open but empty"; .L_Say635; .L_SayX629;rtrue; ]; Array TX_S_24 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_24; [ R_TX_S_25 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~closed~"; rtrue; } #endif; ! DEBUG ! [1: ~closed~] say__p=1;! [2: ~closed~] ParaContent(); print "closed"; .L_Say636; .L_SayX630;rtrue; ]; Array TX_S_25 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_25; [ R_TX_S_26 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~closed and locked~"; rtrue; } #endif; ! DEBUG ! [1: ~closed and locked~] say__p=1;! [2: ~closed and locked~] ParaContent(); print "closed and locked"; .L_Say637; .L_SayX631;rtrue; ]; Array TX_S_26 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_26; [ R_TX_S_27 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~containing~"; rtrue; } #endif; ! DEBUG ! [1: ~containing~] say__p=1;! [2: ~containing~] ParaContent(); print "containing"; .L_Say638; .L_SayX632;rtrue; ]; Array TX_S_27 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_27; [ R_TX_S_28 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~on [if the noun is a person]whom[otherwise]which[end if] ~"; rtrue; } #endif; ! DEBUG ! [1: ~on [if the noun is a person]whom[otherwise]which[end if] ~] say__p=1;! [2: ~on ~] ParaContent(); print "on ";! [3: if the noun is a person] if (~~((((noun ofclass K8_person))))) jump L_Say639;! [4: ~whom~] ParaContent(); print "whom";! [5: otherwise] jump L_SayX633; .L_Say639;! [6: ~which~] ParaContent(); print "which";! [7: end if] .L_Say640; .L_SayX633;! [8: ~ ~] ParaContent(); print " "; .L_Say641; .L_SayX634;rtrue; ]; Array TX_S_28 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_28; [ R_TX_S_29 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, on top of [if the noun is a person]whom[otherwise]which[end if] ~"; rtrue; } #endif; ! DEBUG ! [1: ~, on top of [if the noun is a person]whom[otherwise]which[end if] ~] say__p=1;! [2: ~, on top of ~] ParaContent(); print ", on top of ";! [3: if the noun is a person] if (~~((((noun ofclass K8_person))))) jump L_Say642;! [4: ~whom~] ParaContent(); print "whom";! [5: otherwise] jump L_SayX635; .L_Say642;! [6: ~which~] ParaContent(); print "which";! [7: end if] .L_Say643; .L_SayX635;! [8: ~ ~] ParaContent(); print " "; .L_Say644; .L_SayX636;rtrue; ]; Array TX_S_29 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_29; [ R_TX_S_30 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~in [if the noun is a person]whom[otherwise]which[end if] ~"; rtrue; } #endif; ! DEBUG ! [1: ~in [if the noun is a person]whom[otherwise]which[end if] ~] say__p=1;! [2: ~in ~] ParaContent(); print "in ";! [3: if the noun is a person] if (~~((((noun ofclass K8_person))))) jump L_Say645;! [4: ~whom~] ParaContent(); print "whom";! [5: otherwise] jump L_SayX637; .L_Say645;! [6: ~which~] ParaContent(); print "which";! [7: end if] .L_Say646; .L_SayX637;! [8: ~ ~] ParaContent(); print " "; .L_Say647; .L_SayX638;rtrue; ]; Array TX_S_30 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_30; [ R_TX_S_31 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, inside [if the noun is a person]whom[otherwise]which[end if] ~"; rtrue; } #endif; ! DEBUG ! [1: ~, inside [if the noun is a person]whom[otherwise]which[end if] ~] say__p=1;! [2: ~, inside ~] ParaContent(); print ", inside ";! [3: if the noun is a person] if (~~((((noun ofclass K8_person))))) jump L_Say648;! [4: ~whom~] ParaContent(); print "whom";! [5: otherwise] jump L_SayX639; .L_Say648;! [6: ~which~] ParaContent(); print "which";! [7: end if] .L_Say649; .L_SayX639;! [8: ~ ~] ParaContent(); print " "; .L_Say650; .L_SayX640;rtrue; ]; Array TX_S_31 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_31; [ R_TX_S_32 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding list writer internals][are]~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding list writer internals][are]~] say__p=1;! [2: regarding list writer internals] ParaContent(); RegardingLWI();! [3: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say651; .L_SayX641;rtrue; ]; Array TX_S_32 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_32; [ R_TX_S_33 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding list writer internals][are] nothing~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding list writer internals][are] nothing~] say__p=1;! [2: regarding list writer internals] ParaContent(); RegardingLWI();! [3: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ nothing~] ParaContent(); print " nothing"; .L_Say652; .L_SayX642;rtrue; ]; Array TX_S_33 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_33; [ R_TX_S_34 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Nothing~"; rtrue; } #endif; ! DEBUG ! [1: ~Nothing~] say__p=1;! [2: ~Nothing~] ParaContent(); print "Nothing"; .L_Say653; .L_SayX643;rtrue; ]; Array TX_S_34 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_34; [ R_TX_S_35 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~nothing~"; rtrue; } #endif; ! DEBUG ! [1: ~nothing~] say__p=1;! [2: ~nothing~] ParaContent(); print "nothing"; .L_Say654; .L_SayX644;rtrue; ]; Array TX_S_35 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_35; [ R_TX_S_36 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[bracket]That command asks to do something outside of play, so it can only make sense from you to me. [The noun] cannot be asked to do this.[close bracket]~"; rtrue; } #endif; ! DEBUG ! [1: ~[bracket]That command asks to do something outside of play, so it can only make sense from you to me. [The noun] cannot be asked to do this.[close bracket]~] say__p=1;! [2: bracket] ParaContent(); print "[";! [3: ~That command asks to do something outside of play, so it can only make sense from you to me. ~] ParaContent(); print "That command asks to do something outside of play, so it can only make sense from you to me. ";! [4: the noun] ParaContent(); print (The) noun;! [5: ~ cannot be asked to do this.~] ParaContent(); print " cannot be asked to do this.";! [6: close bracket] ParaContent(); print "]"; .L_Say655; .L_SayX645;rtrue; ]; Array TX_S_36 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_36; [ R_TX_S_37 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You must name an object.~"; rtrue; } #endif; ! DEBUG ! [1: ~You must name an object.~] say__p=1;! [2: ~You must name an object.~] ParaContent(); print "You must name an object."; .L_Say656; .L_SayX646;rtrue; ]; Array TX_S_37 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_37; [ R_TX_S_38 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You may not name an object.~"; rtrue; } #endif; ! DEBUG ! [1: ~You may not name an object.~] say__p=1;! [2: ~You may not name an object.~] ParaContent(); print "You may not name an object."; .L_Say657; .L_SayX647;rtrue; ]; Array TX_S_38 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_38; [ R_TX_S_39 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You must supply a noun.~"; rtrue; } #endif; ! DEBUG ! [1: ~You must supply a noun.~] say__p=1;! [2: ~You must supply a noun.~] ParaContent(); print "You must supply a noun."; .L_Say658; .L_SayX648;rtrue; ]; Array TX_S_39 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_39; [ R_TX_S_40 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You may not supply a noun.~"; rtrue; } #endif; ! DEBUG ! [1: ~You may not supply a noun.~] say__p=1;! [2: ~You may not supply a noun.~] ParaContent(); print "You may not supply a noun."; .L_Say659; .L_SayX649;rtrue; ]; Array TX_S_40 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_40; [ R_TX_S_41 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You must name a second object.~"; rtrue; } #endif; ! DEBUG ! [1: ~You must name a second object.~] say__p=1;! [2: ~You must name a second object.~] ParaContent(); print "You must name a second object."; .L_Say660; .L_SayX650;rtrue; ]; Array TX_S_41 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_41; [ R_TX_S_42 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You may not name a second object.~"; rtrue; } #endif; ! DEBUG ! [1: ~You may not name a second object.~] say__p=1;! [2: ~You may not name a second object.~] ParaContent(); print "You may not name a second object."; .L_Say661; .L_SayX651;rtrue; ]; Array TX_S_42 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_42; [ R_TX_S_43 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You must supply a second noun.~"; rtrue; } #endif; ! DEBUG ! [1: ~You must supply a second noun.~] say__p=1;! [2: ~You must supply a second noun.~] ParaContent(); print "You must supply a second noun."; .L_Say662; .L_SayX652;rtrue; ]; Array TX_S_43 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_43; [ R_TX_S_44 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You may not supply a second noun.~"; rtrue; } #endif; ! DEBUG ! [1: ~You may not supply a second noun.~] say__p=1;! [2: ~You may not supply a second noun.~] ParaContent(); print "You may not supply a second noun."; .L_Say663; .L_SayX653;rtrue; ]; Array TX_S_44 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_44; [ R_TX_S_45 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(Since something dramatic has happened, your list of commands has been cut short.)~"; rtrue; } #endif; ! DEBUG ! [1: ~(Since something dramatic has happened, your list of commands has been cut short.)~] say__p=1;! [2: ~(Since something dramatic has happened, your list of commands has been cut short.)~] ParaContent(); print "(Since something dramatic has happened, your list of commands has been cut short.)"; .L_Say664; .L_SayX654;rtrue; ]; Array TX_S_45 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_45; [ R_TX_S_46 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I didn't understand that instruction.~"; rtrue; } #endif; ! DEBUG ! [1: ~I didn't understand that instruction.~] say__p=1;! [2: ~I didn't understand that instruction.~] ParaContent(); print "I didn't understand that instruction."; .L_Say665; .L_SayX655;rtrue; ]; Array TX_S_46 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_46; [ R_TX_S_47 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I didn't understand that sentence.~"; rtrue; } #endif; ! DEBUG ! [1: ~I didn't understand that sentence.~] say__p=1;! [2: ~I didn't understand that sentence.~] ParaContent(); print "I didn't understand that sentence."; .L_Say666; .L_SayX656;rtrue; ]; Array TX_S_47 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_47; [ R_TX_S_48 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I only understood you as far as wanting to ~"; rtrue; } #endif; ! DEBUG ! [1: ~I only understood you as far as wanting to ~] say__p=1;! [2: ~I only understood you as far as wanting to ~] ParaContent(); print "I only understood you as far as wanting to "; .L_Say667; .L_SayX657;rtrue; ]; Array TX_S_48 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_48; [ R_TX_S_49 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I only understood you as far as wanting to (go) ~"; rtrue; } #endif; ! DEBUG ! [1: ~I only understood you as far as wanting to (go) ~] say__p=1;! [2: ~I only understood you as far as wanting to (go) ~] ParaContent(); print "I only understood you as far as wanting to (go) "; .L_Say668; .L_SayX658;rtrue; ]; Array TX_S_49 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_49; [ R_TX_S_50 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I didn't understand that number.~"; rtrue; } #endif; ! DEBUG ! [1: ~I didn't understand that number.~] say__p=1;! [2: ~I didn't understand that number.~] ParaContent(); print "I didn't understand that number."; .L_Say669; .L_SayX659;rtrue; ]; Array TX_S_50 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_50; [ R_TX_S_51 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't] see any such thing.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't] see any such thing.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't] ConjugateVerb_77(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ see any such thing.~] ParaContent(); print " see any such thing."; .L_Say670; .L_SayX660;rtrue; ]; Array TX_S_51 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_51; [ R_TX_S_52 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You seem to have said too little!~"; rtrue; } #endif; ! DEBUG ! [1: ~You seem to have said too little!~] say__p=1;! [2: ~You seem to have said too little!~] ParaContent(); print "You seem to have said too little!"; .L_Say671; .L_SayX661;rtrue; ]; Array TX_S_52 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_52; [ R_TX_S_53 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [aren't] holding that!~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [aren't] holding that!~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ holding that!~] ParaContent(); print " holding that!"; .L_Say672; .L_SayX662;rtrue; ]; Array TX_S_53 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_53; [ R_TX_S_54 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can't use multiple objects with that verb.~"; rtrue; } #endif; ! DEBUG ! [1: ~You can't use multiple objects with that verb.~] say__p=1;! [2: ~You can't use multiple objects with that verb.~] ParaContent(); print "You can't use multiple objects with that verb."; .L_Say673; .L_SayX663;rtrue; ]; Array TX_S_54 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_54; [ R_TX_S_55 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can only use multiple objects once on a line.~"; rtrue; } #endif; ! DEBUG ! [1: ~You can only use multiple objects once on a line.~] say__p=1;! [2: ~You can only use multiple objects once on a line.~] ParaContent(); print "You can only use multiple objects once on a line."; .L_Say674; .L_SayX664;rtrue; ]; Array TX_S_55 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_55; [ R_TX_S_56 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I'm not sure what ['][pronoun i6 dictionary word]['] refers to.~"; rtrue; } #endif; ! DEBUG ! [1: ~I'm not sure what ['][pronoun i6 dictionary word]['] refers to.~] say__p=1;! [2: ~I'm not sure what ~] ParaContent(); print "I'm not sure what ";! [3: '] ParaContent(); print "'";! [4: pronoun i6 dictionary word] ParaContent(); print (address) pronoun_word;! [5: '] ParaContent(); print "'";! [6: ~ refers to.~] ParaContent(); print " refers to."; .L_Say675; .L_SayX665;rtrue; ]; Array TX_S_56 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_56; [ R_TX_S_57 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't] see ['][pronoun i6 dictionary word]['] ([the noun]) at the moment.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't] see ['][pronoun i6 dictionary word]['] ([the noun]) at the moment.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't] ConjugateVerb_77(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ see ~] ParaContent(); print " see ";! [6: '] ParaContent(); print "'";! [7: pronoun i6 dictionary word] ParaContent(); print (address) pronoun_word;! [8: '] ParaContent(); print "'";! [9: ~ (~] ParaContent(); print " (";! [10: the noun] ParaContent(); print (the) noun;! [11: ~) at the moment.~] ParaContent(); print ") at the moment."; .L_Say676; .L_SayX666;rtrue; ]; Array TX_S_57 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_57; [ R_TX_S_58 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You excepted something not included anyway!~"; rtrue; } #endif; ! DEBUG ! [1: ~You excepted something not included anyway!~] say__p=1;! [2: ~You excepted something not included anyway!~] ParaContent(); print "You excepted something not included anyway!"; .L_Say677; .L_SayX667;rtrue; ]; Array TX_S_58 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_58; [ R_TX_S_59 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can only do that to something animate.~"; rtrue; } #endif; ! DEBUG ! [1: ~You can only do that to something animate.~] say__p=1;! [2: ~You can only do that to something animate.~] ParaContent(); print "You can only do that to something animate."; .L_Say678; .L_SayX668;rtrue; ]; Array TX_S_59 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_59; [ R_TX_S_60 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~That's not a verb I [if American dialect option is active]recognize[otherwise]recognise[end if].~"; rtrue; } #endif; ! DEBUG ! [1: ~That's not a verb I [if American dialect option is active]recognize[otherwise]recognise[end if].~] say__p=1;! [2: ~That's not a verb I ~] ParaContent(); print "That's not a verb I ";! [3: if american dialect option is active] if (~~(((((Adj_25_t1_v16(5))))))) jump L_Say679;! [4: ~recognize~] ParaContent(); print "recognize";! [5: otherwise] jump L_SayX669; .L_Say679;! [6: ~recognise~] ParaContent(); print "recognise";! [7: end if] .L_Say680; .L_SayX669;! [8: ~.~] ParaContent(); print "."; .L_Say681; .L_SayX670;rtrue; ]; Array TX_S_60 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_60; [ R_TX_S_61 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~That's not something you need to refer to in the course of this game.~"; rtrue; } #endif; ! DEBUG ! [1: ~That's not something you need to refer to in the course of this game.~] say__p=1;! [2: ~That's not something you need to refer to in the course of this game.~] ParaContent(); print "That's not something you need to refer to in the course of this game."; .L_Say682; .L_SayX671;rtrue; ]; Array TX_S_61 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_61; [ R_TX_S_62 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I didn't understand the way that finished.~"; rtrue; } #endif; ! DEBUG ! [1: ~I didn't understand the way that finished.~] say__p=1;! [2: ~I didn't understand the way that finished.~] ParaContent(); print "I didn't understand the way that finished."; .L_Say683; .L_SayX672;rtrue; ]; Array TX_S_62 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_62; [ R_TX_S_63 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[if number understood is 0]None[otherwise]Only [number understood in words][end if] of those [regarding the number understood][are] available.~"; rtrue; } #endif; ! DEBUG ! [1: ~[if number understood is 0]None[otherwise]Only [number understood in words][end if] of those [regarding the number understood][are] available.~] say__p=1;! [2: if number understood is 0] if (~~((((parsed_number == 0))))) jump L_Say684;! [3: ~None~] ParaContent(); print "None";! [4: otherwise] jump L_SayX673; .L_Say684;! [5: ~Only ~] ParaContent(); print "Only ";! [6: number understood in words] ParaContent(); print (number) say__n=(parsed_number);! [7: end if] .L_Say685; .L_SayX673;! [8: ~ of those ~] ParaContent(); print " of those ";! [9: regarding the number understood] ParaContent(); RegardingNumber(parsed_number);! [10: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [11: ~ available.~] ParaContent(); print " available."; .L_Say686; .L_SayX674;rtrue; ]; Array TX_S_63 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_63; [ R_TX_S_64 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~That noun did not make sense in this context.~"; rtrue; } #endif; ! DEBUG ! [1: ~That noun did not make sense in this context.~] say__p=1;! [2: ~That noun did not make sense in this context.~] ParaContent(); print "That noun did not make sense in this context."; .L_Say687; .L_SayX675;rtrue; ]; Array TX_S_64 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_64; [ R_TX_S_65 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~To repeat a command like 'frog, jump', just say 'again', not 'frog, again'.~"; rtrue; } #endif; ! DEBUG ! [1: ~To repeat a command like 'frog, jump', just say 'again', not 'frog, again'.~] say__p=1;! [2: ~To repeat a command like 'frog, jump', just say 'again', not 'frog, again'.~] ParaContent(); print "To repeat a command like ~frog, jump~, just say ~again~, not ~frog, again~."; .L_Say688; .L_SayX676;rtrue; ]; Array TX_S_65 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_65; [ R_TX_S_66 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can't begin with a comma.~"; rtrue; } #endif; ! DEBUG ! [1: ~You can't begin with a comma.~] say__p=1;! [2: ~You can't begin with a comma.~] ParaContent(); print "You can't begin with a comma."; .L_Say689; .L_SayX677;rtrue; ]; Array TX_S_66 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_66; [ R_TX_S_67 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You seem to want to talk to someone, but I can't see whom.~"; rtrue; } #endif; ! DEBUG ! [1: ~You seem to want to talk to someone, but I can't see whom.~] say__p=1;! [2: ~You seem to want to talk to someone, but I can't see whom.~] ParaContent(); print "You seem to want to talk to someone, but I can't see whom."; .L_Say690; .L_SayX678;rtrue; ]; Array TX_S_67 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_67; [ R_TX_S_68 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can't talk to [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~You can't talk to [the noun].~] say__p=1;! [2: ~You can't talk to ~] ParaContent(); print "You can't talk to ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~.~] ParaContent(); print "."; .L_Say691; .L_SayX679;rtrue; ]; Array TX_S_68 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_68; [ R_TX_S_69 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~To talk to someone, try 'someone, hello' or some such.~"; rtrue; } #endif; ! DEBUG ! [1: ~To talk to someone, try 'someone, hello' or some such.~] say__p=1;! [2: ~To talk to someone, try 'someone, hello' or some such.~] ParaContent(); print "To talk to someone, try ~someone, hello~ or some such."; .L_Say692; .L_SayX680;rtrue; ]; Array TX_S_69 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_69; [ R_TX_S_70 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I beg your pardon?~"; rtrue; } #endif; ! DEBUG ! [1: ~I beg your pardon?~] say__p=1;! [2: ~I beg your pardon?~] ParaContent(); print "I beg your pardon?"; .L_Say693; .L_SayX681;rtrue; ]; Array TX_S_70 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_70; [ R_TX_S_71 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Nothing to do!~"; rtrue; } #endif; ! DEBUG ! [1: ~Nothing to do!~] say__p=1;! [2: ~Nothing to do!~] ParaContent(); print "Nothing to do!"; .L_Say694; .L_SayX682;rtrue; ]; Array TX_S_71 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_71; [ R_TX_S_72 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [adapt the verb are from the third person plural] none at all available!~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [adapt the verb are from the third person plural] none at all available!~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: adapt the verb are from the third person plural] ParaContent(); ConjugateVerb_0(CV_POS, I117_third_person_plural, story_tense);! [5: ~ none at all available!~] ParaContent(); print " none at all available!"; .L_Say695; .L_SayX683;rtrue; ]; Array TX_S_72 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_72; [ R_TX_S_73 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [seem] to belong to [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [seem] to belong to [the noun].~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: seem] ConjugateVerb_55(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ to belong to ~] ParaContent(); print " to belong to ";! [7: the noun] ParaContent(); print (the) noun;! [8: ~.~] ParaContent(); print "."; .L_Say696; .L_SayX684;rtrue; ]; Array TX_S_73 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_73; [ R_TX_S_74 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [can't] contain things.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [can't] contain things.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: can't] ConjugateVerb_77(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ contain things.~] ParaContent(); print " contain things."; .L_Say697; .L_SayX685;rtrue; ]; Array TX_S_74 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_74; [ R_TX_S_75 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [aren't] open.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [aren't] open.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ open.~] ParaContent(); print " open."; .L_Say698; .L_SayX686;rtrue; ]; Array TX_S_75 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_75; [ R_TX_S_76 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [are] empty.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [are] empty.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ empty.~] ParaContent(); print " empty."; .L_Say699; .L_SayX687;rtrue; ]; Array TX_S_76 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_76; [ R_TX_S_77 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Darkness~"; rtrue; } #endif; ! DEBUG ! [1: ~Darkness~] say__p=1;! [2: ~Darkness~] ParaContent(); print "Darkness"; .L_Say700; .L_SayX688;rtrue; ]; Array TX_S_77 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_77; [ R_TX_S_78 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Sorry, that can't be corrected.~"; rtrue; } #endif; ! DEBUG ! [1: ~Sorry, that can't be corrected.~] say__p=1;! [2: ~Sorry, that can't be corrected.~] ParaContent(); print "Sorry, that can't be corrected."; .L_Say701; .L_SayX689;rtrue; ]; Array TX_S_78 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_78; [ R_TX_S_79 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Think nothing of it.~"; rtrue; } #endif; ! DEBUG ! [1: ~Think nothing of it.~] say__p=1;! [2: ~Think nothing of it.~] ParaContent(); print "Think nothing of it."; .L_Say702; .L_SayX690;rtrue; ]; Array TX_S_79 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_79; [ R_TX_S_80 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~'Oops' can only correct a single word.~"; rtrue; } #endif; ! DEBUG ! [1: ~'Oops' can only correct a single word.~] say__p=1;! [2: ~'Oops' can only correct a single word.~] ParaContent(); print "~Oops~ can only correct a single word."; .L_Say703; .L_SayX691;rtrue; ]; Array TX_S_80 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_80; [ R_TX_S_81 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can hardly repeat that.~"; rtrue; } #endif; ! DEBUG ! [1: ~You can hardly repeat that.~] say__p=1;! [2: ~You can hardly repeat that.~] ParaContent(); print "You can hardly repeat that."; .L_Say704; .L_SayX692;rtrue; ]; Array TX_S_81 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_81; [ R_TX_S_82 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Who do you mean, ~"; rtrue; } #endif; ! DEBUG ! [1: ~Who do you mean, ~] say__p=1;! [2: ~Who do you mean, ~] ParaContent(); print "Who do you mean, "; .L_Say705; .L_SayX693;rtrue; ]; Array TX_S_82 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_82; [ R_TX_S_83 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Which do you mean, ~"; rtrue; } #endif; ! DEBUG ! [1: ~Which do you mean, ~] say__p=1;! [2: ~Which do you mean, ~] ParaContent(); print "Which do you mean, "; .L_Say706; .L_SayX694;rtrue; ]; Array TX_S_83 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_83; [ R_TX_S_84 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Sorry, you can only have one item here. Which exactly?~"; rtrue; } #endif; ! DEBUG ! [1: ~Sorry, you can only have one item here. Which exactly?~] say__p=1;! [2: ~Sorry, you can only have one item here. Which exactly?~] ParaContent(); print "Sorry, you can only have one item here. Which exactly?"; .L_Say707; .L_SayX695;rtrue; ]; Array TX_S_84 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_84; [ R_TX_S_85 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Whom do you want [if the noun is not the player][the noun] [end if]to [parser command so far]?~"; rtrue; } #endif; ! DEBUG ! [1: ~Whom do you want [if the noun is not the player][the noun] [end if]to [parser command so far]?~] say__p=1;! [2: ~Whom do you want ~] ParaContent(); print "Whom do you want ";! [3: if the noun is not the player] if (~~((((~~((noun == player))))))) jump L_Say708;! [4: the noun] ParaContent(); print (the) noun;! [5: ~ ~] ParaContent(); print " ";! [6: end if] .L_Say708; .L_SayX696;! [7: ~to ~] ParaContent(); print "to ";! [8: parser command so far] ParaContent(); PrintCommand();! [9: ~?~] ParaContent(); print "?"; .L_Say709; .L_SayX697;rtrue; ]; Array TX_S_85 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_85; [ R_TX_S_86 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~What do you want [if the noun is not the player][the noun] [end if]to [parser command so far]?~"; rtrue; } #endif; ! DEBUG ! [1: ~What do you want [if the noun is not the player][the noun] [end if]to [parser command so far]?~] say__p=1;! [2: ~What do you want ~] ParaContent(); print "What do you want ";! [3: if the noun is not the player] if (~~((((~~((noun == player))))))) jump L_Say710;! [4: the noun] ParaContent(); print (the) noun;! [5: ~ ~] ParaContent(); print " ";! [6: end if] .L_Say710; .L_SayX698;! [7: ~to ~] ParaContent(); print "to ";! [8: parser command so far] ParaContent(); PrintCommand();! [9: ~?~] ParaContent(); print "?"; .L_Say711; .L_SayX699;rtrue; ]; Array TX_S_86 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_86; [ R_TX_S_87 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~those things~"; rtrue; } #endif; ! DEBUG ! [1: ~those things~] say__p=1;! [2: ~those things~] ParaContent(); print "those things"; .L_Say712; .L_SayX700;rtrue; ]; Array TX_S_87 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_87; [ R_TX_S_88 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~that~"; rtrue; } #endif; ! DEBUG ! [1: ~that~] say__p=1;! [2: ~that~] ParaContent(); print "that"; .L_Say713; .L_SayX701;rtrue; ]; Array TX_S_88 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_88; [ R_TX_S_89 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ or ~"; rtrue; } #endif; ! DEBUG ! [1: ~ or ~] say__p=1;! [2: ~ or ~] ParaContent(); print " or "; .L_Say714; .L_SayX702;rtrue; ]; Array TX_S_89 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_89; [ R_TX_S_90 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Please answer yes or no.~"; rtrue; } #endif; ! DEBUG ! [1: ~Please answer yes or no.~] say__p=1;! [2: ~Please answer yes or no.~] ParaContent(); print "Please answer yes or no."; .L_Say715; .L_SayX703;rtrue; ]; Array TX_S_90 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_90; [ R_TX_S_91 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We]~"; rtrue; } #endif; ! DEBUG ! [1: ~[We]~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ()); .L_Say716; .L_SayX704;rtrue; ]; Array TX_S_91 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_91; [ R_TX_S_92 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[ourselves]~"; rtrue; } #endif; ! DEBUG ! [1: ~[ourselves]~] say__p=1;! [2: ourselves] ParaContent(); (PHR_766_r14 ()); .L_Say717; .L_SayX705;rtrue; ]; Array TX_S_92 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_92; [ R_TX_S_93 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[our] former self~"; rtrue; } #endif; ! DEBUG ! [1: ~[our] former self~] say__p=1;! [2: our] ParaContent(); (PHR_767_r15 ());! [3: ~ former self~] ParaContent(); print " former self"; .L_Say718; .L_SayX706;rtrue; ]; Array TX_S_93 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_93; [ R_TX_S_94 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first taking [the noun])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first taking [the noun])[command clarification break]~] say__p=1;! [2: ~(first taking ~] ParaContent(); print "(first taking ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say719; .L_SayX707;rtrue; ]; Array TX_S_94 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_94; [ R_TX_S_95 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~([the second noun] first taking [the noun])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~([the second noun] first taking [the noun])[command clarification break]~] say__p=1;! [2: ~(~] ParaContent(); print "(";! [3: the second noun] ParaContent(); print (the) second;! [4: ~ first taking ~] ParaContent(); print " first taking ";! [5: the noun] ParaContent(); print (the) noun;! [6: ~)~] ParaContent(); print ")";! [7: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say720; .L_SayX708;rtrue; ]; Array TX_S_95 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_95; [ R_TX_S_96 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ You have died ~"; rtrue; } #endif; ! DEBUG ! [1: ~ You have died ~] say__p=1;! [2: ~ You have died ~] ParaContent(); print " You have died "; .L_Say721; .L_SayX709;rtrue; ]; Array TX_S_96 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_96; [ R_TX_S_97 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ You have won ~"; rtrue; } #endif; ! DEBUG ! [1: ~ You have won ~] say__p=1;! [2: ~ You have won ~] ParaContent(); print " You have won "; .L_Say722; .L_SayX710;rtrue; ]; Array TX_S_97 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_97; [ R_TX_S_98 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ The End ~"; rtrue; } #endif; ! DEBUG ! [1: ~ The End ~] say__p=1;! [2: ~ The End ~] ParaContent(); print " The End "; .L_Say723; .L_SayX711;rtrue; ]; Array TX_S_98 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_98; [ R_TX_S_99 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~The use of 'undo' is forbidden in this story.~"; rtrue; } #endif; ! DEBUG ! [1: ~The use of 'undo' is forbidden in this story.~] say__p=1;! [2: ~The use of 'undo' is forbidden in this story.~] ParaContent(); print "The use of ~undo~ is forbidden in this story."; .L_Say724; .L_SayX712;rtrue; ]; Array TX_S_99 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_99; [ R_TX_S_100 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can't 'undo' what hasn't been done!~"; rtrue; } #endif; ! DEBUG ! [1: ~You can't 'undo' what hasn't been done!~] say__p=1;! [2: ~You can't 'undo' what hasn't been done!~] ParaContent(); print "You can't ~undo~ what hasn't been done!"; .L_Say725; .L_SayX713;rtrue; ]; Array TX_S_100 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_100; [ R_TX_S_101 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Your interpreter does not provide 'undo'. Sorry!~"; rtrue; } #endif; ! DEBUG ! [1: ~Your interpreter does not provide 'undo'. Sorry!~] say__p=1;! [2: ~Your interpreter does not provide 'undo'. Sorry!~] ParaContent(); print "Your interpreter does not provide ~undo~. Sorry!"; .L_Say726; .L_SayX714;rtrue; ]; Array TX_S_101 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_101; [ R_TX_S_102 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~'Undo' failed. Sorry!~"; rtrue; } #endif; ! DEBUG ! [1: ~'Undo' failed. Sorry!~] say__p=1;! [2: ~'Undo' failed. Sorry!~] ParaContent(); print "~Undo~ failed. Sorry!"; .L_Say727; .L_SayX715;rtrue; ]; Array TX_S_102 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_102; [ R_TX_S_103 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[bracket]Previous turn undone.[close bracket]~"; rtrue; } #endif; ! DEBUG ! [1: ~[bracket]Previous turn undone.[close bracket]~] say__p=1;! [2: bracket] ParaContent(); print "[";! [3: ~Previous turn undone.~] ParaContent(); print "Previous turn undone.";! [4: close bracket] ParaContent(); print "]"; .L_Say728; .L_SayX716;rtrue; ]; Array TX_S_103 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_103; [ R_TX_S_104 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~'Undo' capacity exhausted. Sorry!~"; rtrue; } #endif; ! DEBUG ! [1: ~'Undo' capacity exhausted. Sorry!~] say__p=1;! [2: ~'Undo' capacity exhausted. Sorry!~] ParaContent(); print "~Undo~ capacity exhausted. Sorry!"; .L_Say729; .L_SayX717;rtrue; ]; Array TX_S_104 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_104; [ R_TX_S_105 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Are you sure you want to quit? ~"; rtrue; } #endif; ! DEBUG ! [1: ~Are you sure you want to quit? ~] say__p=1;! [2: ~Are you sure you want to quit? ~] ParaContent(); print "Are you sure you want to quit? "; .L_Say730; .L_SayX718;rtrue; ]; Array TX_S_105 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_105; [ R_TX_S_106 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Save failed.~"; rtrue; } #endif; ! DEBUG ! [1: ~Save failed.~] say__p=1;! [2: ~Save failed.~] ParaContent(); print "Save failed."; .L_Say731; .L_SayX719;rtrue; ]; Array TX_S_106 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_106; [ R_TX_S_107 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Ok.~"; rtrue; } #endif; ! DEBUG ! [1: ~Ok.~] say__p=1;! [2: ~Ok.~] ParaContent(); print "Ok."; .L_Say732; .L_SayX720;rtrue; ]; Array TX_S_107 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_107; [ R_TX_S_108 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Restore failed.~"; rtrue; } #endif; ! DEBUG ! [1: ~Restore failed.~] say__p=1;! [2: ~Restore failed.~] ParaContent(); print "Restore failed."; .L_Say733; .L_SayX721;rtrue; ]; Array TX_S_108 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_108; [ R_TX_S_109 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Ok.~"; rtrue; } #endif; ! DEBUG ! [1: ~Ok.~] say__p=1;! [2: ~Ok.~] ParaContent(); print "Ok."; .L_Say734; .L_SayX722;rtrue; ]; Array TX_S_109 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_109; [ R_TX_S_110 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Are you sure you want to restart? ~"; rtrue; } #endif; ! DEBUG ! [1: ~Are you sure you want to restart? ~] say__p=1;! [2: ~Are you sure you want to restart? ~] ParaContent(); print "Are you sure you want to restart? "; .L_Say735; .L_SayX723;rtrue; ]; Array TX_S_110 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_110; [ R_TX_S_111 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Failed.~"; rtrue; } #endif; ! DEBUG ! [1: ~Failed.~] say__p=1;! [2: ~Failed.~] ParaContent(); print "Failed."; .L_Say736; .L_SayX724;rtrue; ]; Array TX_S_111 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_111; [ R_TX_S_112 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~The game file has verified as intact.~"; rtrue; } #endif; ! DEBUG ! [1: ~The game file has verified as intact.~] say__p=1;! [2: ~The game file has verified as intact.~] ParaContent(); print "The game file has verified as intact."; .L_Say737; .L_SayX725;rtrue; ]; Array TX_S_112 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_112; [ R_TX_S_113 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~The game file did not verify as intact, and may be corrupt.~"; rtrue; } #endif; ! DEBUG ! [1: ~The game file did not verify as intact, and may be corrupt.~] say__p=1;! [2: ~The game file did not verify as intact, and may be corrupt.~] ParaContent(); print "The game file did not verify as intact, and may be corrupt."; .L_Say738; .L_SayX726;rtrue; ]; Array TX_S_113 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_113; [ R_TX_S_114 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Transcripting is already on.~"; rtrue; } #endif; ! DEBUG ! [1: ~Transcripting is already on.~] say__p=1;! [2: ~Transcripting is already on.~] ParaContent(); print "Transcripting is already on."; .L_Say739; .L_SayX727;rtrue; ]; Array TX_S_114 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_114; [ R_TX_S_115 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Start of a transcript of~"; rtrue; } #endif; ! DEBUG ! [1: ~Start of a transcript of~] say__p=1;! [2: ~Start of a transcript of~] ParaContent(); print "Start of a transcript of"; .L_Say740; .L_SayX728;rtrue; ]; Array TX_S_115 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_115; [ R_TX_S_116 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Attempt to begin transcript failed.~"; rtrue; } #endif; ! DEBUG ! [1: ~Attempt to begin transcript failed.~] say__p=1;! [2: ~Attempt to begin transcript failed.~] ParaContent(); print "Attempt to begin transcript failed."; .L_Say741; .L_SayX729;rtrue; ]; Array TX_S_116 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_116; [ R_TX_S_117 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Transcripting is already off.~"; rtrue; } #endif; ! DEBUG ! [1: ~Transcripting is already off.~] say__p=1;! [2: ~Transcripting is already off.~] ParaContent(); print "Transcripting is already off."; .L_Say742; .L_SayX730;rtrue; ]; Array TX_S_117 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_117; [ R_TX_S_118 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[line break]End of transcript.~"; rtrue; } #endif; ! DEBUG ! [1: ~[line break]End of transcript.~] say__p=1;! [2: line break] ParaContent(); new_line;! [3: ~End of transcript.~] ParaContent(); print "End of transcript."; .L_Say743; .L_SayX731;rtrue; ]; Array TX_S_118 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_118; [ R_TX_S_119 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Attempt to end transcript failed.~"; rtrue; } #endif; ! DEBUG ! [1: ~Attempt to end transcript failed.~] say__p=1;! [2: ~Attempt to end transcript failed.~] ParaContent(); print "Attempt to end transcript failed."; .L_Say744; .L_SayX732;rtrue; ]; Array TX_S_119 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_119; [ R_TX_S_120 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[if the story has ended]In that game you scored[otherwise]You have so far scored[end if] [score] out of a possible [maximum score], in [turn count] turn[s]~"; rtrue; } #endif; ! DEBUG ! [1: ~[if the story has ended]In that game you scored[otherwise]You have so far scored[end if] [score] out of a possible [maximum score], in [turn count] turn[s]~] say__p=1;! [2: if the story has ended] if (~~((((deadflag~=0))))) jump L_Say745;! [3: ~In that game you scored~] ParaContent(); print "In that game you scored";! [4: otherwise] jump L_SayX733; .L_Say745;! [5: ~You have so far scored~] ParaContent(); print "You have so far scored";! [6: end if] .L_Say746; .L_SayX733;! [7: ~ ~] ParaContent(); print " ";! [8: score] ParaContent(); print (say__n=score);! [9: ~ out of a possible ~] ParaContent(); print " out of a possible ";! [10: maximum score] ParaContent(); print (say__n=MAX_SCORE);! [11: ~, in ~] ParaContent(); print ", in ";! [12: turn count] ParaContent(); print (say__n=turns);! [13: ~ turn~] ParaContent(); print " turn";! [14: s] ParaContent(); STextSubstitution(); .L_Say747; .L_SayX734;rtrue; ]; Array TX_S_120 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_120; [ R_TX_S_121 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, earning you the rank of ~"; rtrue; } #endif; ! DEBUG ! [1: ~, earning you the rank of ~] say__p=1;! [2: ~, earning you the rank of ~] ParaContent(); print ", earning you the rank of "; .L_Say748; .L_SayX735;rtrue; ]; Array TX_S_121 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_121; [ R_TX_S_122 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no score in this story.~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no score in this story.~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no score in this story.~] ParaContent(); print " no score in this story."; .L_Say749; .L_SayX736;rtrue; ]; Array TX_S_122 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_122; [ R_TX_S_123 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[bracket]Your score has just gone up by [number understood in words] point[s].[close bracket]~"; rtrue; } #endif; ! DEBUG ! [1: ~[bracket]Your score has just gone up by [number understood in words] point[s].[close bracket]~] say__p=1;! [2: bracket] ParaContent(); print "[";! [3: ~Your score has just gone up by ~] ParaContent(); print "Your score has just gone up by ";! [4: number understood in words] ParaContent(); print (number) say__n=(parsed_number);! [5: ~ point~] ParaContent(); print " point";! [6: s] ParaContent(); STextSubstitution();! [7: ~.~] ParaContent(); print ".";! [8: close bracket] ParaContent(); print "]"; .L_Say750; .L_SayX737;rtrue; ]; Array TX_S_123 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_123; [ R_TX_S_124 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[bracket]Your score has just gone down by [number understood in words] point[s].[close bracket]~"; rtrue; } #endif; ! DEBUG ! [1: ~[bracket]Your score has just gone down by [number understood in words] point[s].[close bracket]~] say__p=1;! [2: bracket] ParaContent(); print "[";! [3: ~Your score has just gone down by ~] ParaContent(); print "Your score has just gone down by ";! [4: number understood in words] ParaContent(); print (number) say__n=(parsed_number);! [5: ~ point~] ParaContent(); print " point";! [6: s] ParaContent(); STextSubstitution();! [7: ~.~] ParaContent(); print ".";! [8: close bracket] ParaContent(); print "]"; .L_Say751; .L_SayX738;rtrue; ]; Array TX_S_124 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_124; [ R_TX_S_125 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ is now in its 'superbrief' mode, which always gives short descriptions of locations (even if you haven't been there before).~"; rtrue; } #endif; ! DEBUG ! [1: ~ is now in its 'superbrief' mode, which always gives short descriptions of locations (even if you haven't been there before).~] say__p=1;! [2: ~ is now in its 'superbrief' mode, which always gives short descriptions of locations (even if you haven't been there before).~] ParaContent(); print " is now in its ~superbrief~ mode, which always gives short descriptions of locations (even if you haven't been there before)."; .L_Say752; .L_SayX739;rtrue; ]; Array TX_S_125 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_125; [ R_TX_S_126 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ is now in its 'verbose' mode, which always gives long descriptions of locations (even if you've been there before).~"; rtrue; } #endif; ! DEBUG ! [1: ~ is now in its 'verbose' mode, which always gives long descriptions of locations (even if you've been there before).~] say__p=1;! [2: ~ is now in its 'verbose' mode, which always gives long descriptions of locations (even if you've been there before).~] ParaContent(); print " is now in its ~verbose~ mode, which always gives long descriptions of locations (even if you've been there before)."; .L_Say753; .L_SayX740;rtrue; ]; Array TX_S_126 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_126; [ R_TX_S_127 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ is now in its 'brief' printing mode, which gives long descriptions of places never before visited and short descriptions otherwise.~"; rtrue; } #endif; ! DEBUG ! [1: ~ is now in its 'brief' printing mode, which gives long descriptions of places never before visited and short descriptions otherwise.~] say__p=1;! [2: ~ is now in its 'brief' printing mode, which gives long descriptions of places never before visited and short descriptions otherwise.~] ParaContent(); print " is now in its ~brief~ printing mode, which gives long descriptions of places never before visited and short descriptions otherwise."; .L_Say754; .L_SayX741;rtrue; ]; Array TX_S_127 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_127; [ R_TX_S_128 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Score notification on.~"; rtrue; } #endif; ! DEBUG ! [1: ~Score notification on.~] say__p=1;! [2: ~Score notification on.~] ParaContent(); print "Score notification on."; .L_Say755; .L_SayX742;rtrue; ]; Array TX_S_128 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_128; [ R_TX_S_129 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Score notification off.~"; rtrue; } #endif; ! DEBUG ! [1: ~Score notification off.~] say__p=1;! [2: ~Score notification off.~] ParaContent(); print "Score notification off."; .L_Say756; .L_SayX743;rtrue; ]; Array TX_S_129 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_129; [ R_TX_S_130 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~At the moment, ~"; rtrue; } #endif; ! DEBUG ! [1: ~At the moment, ~] say__p=1;! [2: ~At the moment, ~] ParaContent(); print "At the moment, "; .L_Say757; .L_SayX744;rtrue; ]; Array TX_S_130 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_130; [ R_TX_S_131 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~means ~"; rtrue; } #endif; ! DEBUG ! [1: ~means ~] say__p=1;! [2: ~means ~] ParaContent(); print "means "; .L_Say758; .L_SayX745;rtrue; ]; Array TX_S_131 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_131; [ R_TX_S_132 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~is unset~"; rtrue; } #endif; ! DEBUG ! [1: ~is unset~] say__p=1;! [2: ~is unset~] ParaContent(); print "is unset"; .L_Say759; .L_SayX746;rtrue; ]; Array TX_S_132 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_132; [ R_TX_S_133 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~no pronouns are known to the game.~"; rtrue; } #endif; ! DEBUG ! [1: ~no pronouns are known to the game.~] say__p=1;! [2: ~no pronouns are known to the game.~] ParaContent(); print "no pronouns are known to the game."; .L_Say760; .L_SayX747;rtrue; ]; Array TX_S_133 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_133; [ R_TX_S_157 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[current item from the multiple object list]: [run paragraph on]~"; rtrue; } #endif; ! DEBUG ! [1: ~[current item from the multiple object list]: [run paragraph on]~] say__p=1;! [2: current item from the multiple object list] ParaContent(); PrintShortName(multiple_object_item);! [3: ~: ~] ParaContent(); print ": ";! [4: run paragraph on] ParaContent(); RunParagraphOn(); .L_Say761; .L_SayX748;rtrue; ]; Array TX_S_157 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_157; [ R_TX_S_158 tmp_0 ! Let/loop value, e.g., 'blocking door': door ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first opening [the blocking door])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first opening [the blocking door])[command clarification break]~] say__p=1;! [2: ~(first opening ~] ParaContent(); print "(first opening ";! [3: the blocking door] ParaContent(); print (the) tmp_0;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say762; .L_SayX749;rtrue; ]; Array TX_S_158 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_158; [ R_TX_S_159 tmp_0 ! Let/loop value, e.g., 'door ajar': thing ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first closing [the door ajar])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first closing [the door ajar])[command clarification break]~] say__p=1;! [2: ~(first closing ~] ParaContent(); print "(first closing ";! [3: the door ajar] ParaContent(); print (the) tmp_0;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say763; .L_SayX750;rtrue; ]; Array TX_S_159 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_159; [ R_TX_S_160 tmp_0 ! Let/loop value, e.g., 'door ajar': thing ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first closing [the door ajar])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first closing [the door ajar])[command clarification break]~] say__p=1;! [2: ~(first closing ~] ParaContent(); print "(first closing ";! [3: the door ajar] ParaContent(); print (the) tmp_0;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say764; .L_SayX751;rtrue; ]; Array TX_S_160 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_160; [ R_TX_S_161 tmp_0 ! Let/loop value, e.g., 'sealed chest': thing ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first unlocking [the sealed chest])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first unlocking [the sealed chest])[command clarification break]~] say__p=1;! [2: ~(first unlocking ~] ParaContent(); print "(first unlocking ";! [3: the sealed chest] ParaContent(); print (the) tmp_0;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say765; .L_SayX752;rtrue; ]; Array TX_S_161 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_161; [ R_TX_S_162 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [are] not a key.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [are] not a key.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ not a key.~] ParaContent(); print " not a key."; .L_Say766; .L_SayX753;rtrue; ]; Array TX_S_162 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_162; [ R_TX_S_163 tmp_0 ! Let/loop value (deallocated by end of phrase) ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [unlock] [the list of things unbolted by the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [unlock] [the list of things unbolted by the noun].~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: unlock] ConjugateVerb_20(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the list of things unbolted by the noun] ParaContent(); objectloop(tmp_0 ofclass Object) if (((tmp_0 ofclass K2_thing) && (noun == (RGuard_f0_2(tmp_0))))) give tmp_0 workflag2; else give tmp_0 ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT+DEFART_BIT);! [7: ~.~] ParaContent(); print "."; .L_Say767; .L_SayX754;rtrue; ]; Array TX_S_163 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_163; [ R_TX_S_164 tmp_0 ! Let/loop value, e.g., 'item': passkey tmp_1 ! Let/loop value (deallocated by end of phrase) ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~ (which [open] [the list of things unbolted by the item])~"; rtrue; } #endif; ! DEBUG ! [1: ~ (which [open] [the list of things unbolted by the item])~] say__p=1;! [2: ~ (which ~] ParaContent(); print " (which ";! [3: open] ConjugateVerb_45(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ ~] ParaContent(); print " ";! [5: the list of things unbolted by the item] ParaContent(); objectloop(tmp_1 ofclass Object) if (((tmp_1 ofclass K2_thing) && (tmp_0 == (RGuard_f0_2(tmp_1))))) give tmp_1 workflag2; else give tmp_1 ~workflag2; WriteListOfMarkedObjects(ENGLISH_BIT+DEFART_BIT);! [6: ~)~] ParaContent(); print ")"; .L_Say768; .L_SayX755;rtrue; ]; Array TX_S_164 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_164; [ R_TX_S_165 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~You'll have to say which compass direction to go in.~"; rtrue; } #endif; ! DEBUG ! [1: ~You'll have to say which compass direction to go in.~] say__p=1;! [2: ~You'll have to say which compass direction to go in.~] ParaContent(); print "You'll have to say which compass direction to go in."; .L_Say769; .L_SayX756;rtrue; ]; Array TX_S_165 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_165; [ R_TX_S_166 tmp_0 ! Let/loop value, e.g., 'named options count': number tmp_1 ! Let/loop value: object tmp_2 ! Let/loop value: object ct_0 ! internal use only ct_1 ! internal use only ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Would you like to ~"; rtrue; } #endif; ! DEBUG ! [1: ~Would you like to ~] say__p=1;! [2: ~Would you like to ~] ParaContent(); print "Would you like to "; .L_Say770; .L_SayX757;rtrue; ]; Array TX_S_166 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_166; [ R_TX_S_167 tmp_0 ! Let/loop value, e.g., 'named options count': number tmp_1 ! Let/loop value: object tmp_2 ! Let/loop value: object ct_0 ! internal use only ct_1 ! internal use only ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ or ~"; rtrue; } #endif; ! DEBUG ! [1: ~ or ~] say__p=1;! [2: ~ or ~] ParaContent(); print " or "; .L_Say771; .L_SayX758;rtrue; ]; Array TX_S_167 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_167; [ R_TX_S_168 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~> [run paragraph on]~"; rtrue; } #endif; ! DEBUG ! [1: ~> [run paragraph on]~] say__p=1;! [2: ~> ~] ParaContent(); print "> ";! [3: run paragraph on] ParaContent(); RunParagraphOn(); .L_Say772; .L_SayX759;rtrue; ]; Array TX_S_168 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_168; [ R_TX_S_169 tmp_0 ! Let/loop value: object tmp_1 ! Let/loop value: object ct_0 ! internal use only ct_1 ! internal use only ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Please give one of the answers above.~"; rtrue; } #endif; ! DEBUG ! [1: ~Please give one of the answers above.~] say__p=1;! [2: ~Please give one of the answers above.~] ParaContent(); print "Please give one of the answers above."; .L_Say773; .L_SayX760;rtrue; ]; Array TX_S_169 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_169; [ R_TX_S_170 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'mentionable count': number tmp_2 ! Let/loop value: thing tmp_3 ! Let/loop value: thing ct_0 ! internal use only ct_1 ! internal use only ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] ~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] ~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " "; .L_Say774; .L_SayX761;rtrue; ]; Array TX_S_170 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_170; [ R_TX_S_171 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'mentionable count': number tmp_2 ! Let/loop value: thing tmp_3 ! Let/loop value: thing ct_0 ! internal use only ct_1 ! internal use only ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; tmp_3=LocalParking-->3; ct_0=LocalParking-->4; ct_1=LocalParking-->5; #ifdef DEBUG; if (suppress_text_substitution) { print "~On [the domain] [we] ~"; rtrue; } #endif; ! DEBUG ! [1: ~On [the domain] [we] ~] say__p=1;! [2: ~On ~] ParaContent(); print "On ";! [3: the domain] ParaContent(); print (the) tmp_0;! [4: ~ ~] ParaContent(); print " ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " "; .L_Say775; .L_SayX762;rtrue; ]; Array TX_S_171 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_171; [ R_TX_S_172 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'mentionable count': number tmp_2 ! Let/loop value: thing tmp_3 ! Let/loop value: thing ct_0 ! internal use only ct_1 ! internal use only ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; tmp_3=LocalParking-->3; ct_0=LocalParking-->4; ct_1=LocalParking-->5; #ifdef DEBUG; if (suppress_text_substitution) { print "~In [the domain] [we] ~"; rtrue; } #endif; ! DEBUG ! [1: ~In [the domain] [we] ~] say__p=1;! [2: ~In ~] ParaContent(); print "In ";! [3: the domain] ParaContent(); print (the) tmp_0;! [4: ~ ~] ParaContent(); print " ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " "; .L_Say776; .L_SayX763;rtrue; ]; Array TX_S_172 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_172; [ R_TX_S_173 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'mentionable count': number tmp_2 ! Let/loop value: thing tmp_3 ! Let/loop value: thing ct_0 ! internal use only ct_1 ! internal use only ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the player][can] also see ~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the player][can] also see ~] say__p=1;! [2: regarding the player] ParaContent(); RegardingSingleObject(player);! [3: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ also see ~] ParaContent(); print " also see "; .L_Say777; .L_SayX764;rtrue; ]; Array TX_S_173 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_173; [ R_TX_S_174 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'mentionable count': number tmp_2 ! Let/loop value: thing tmp_3 ! Let/loop value: thing ct_0 ! internal use only ct_1 ! internal use only ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the player][can] see ~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the player][can] see ~] say__p=1;! [2: regarding the player] ParaContent(); RegardingSingleObject(player);! [3: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ see ~] ParaContent(); print " see "; .L_Say778; .L_SayX765;rtrue; ]; Array TX_S_174 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_174; [ R_TX_S_175 tmp_0 ! Let/loop value, e.g., 'domain': object tmp_1 ! Let/loop value, e.g., 'mentionable count': number tmp_2 ! Let/loop value, e.g., 'common holder': object tmp_3 ! Let/loop value, e.g., 'contents form of list': truth state tmp_4 ! Let/loop value: object tmp_5 ! Let/loop value: thing ct_0 ! internal use only ct_1 ! internal use only ; #ifdef DEBUG; if (suppress_text_substitution) { print "~ here~"; rtrue; } #endif; ! DEBUG ! [1: ~ here~] say__p=1;! [2: ~ here~] ParaContent(); print " here"; .L_Say779; .L_SayX766;rtrue; ]; Array TX_S_175 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_175; [ R_TX_S_176 tmp_0 ! Let/loop value, e.g., 'item': thing tmp_1 ! Let/loop value: thing tmp_2 ! Let/loop value: thing ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; #ifdef DEBUG; if (suppress_text_substitution) { print "~On [the item] ~"; rtrue; } #endif; ! DEBUG ! [1: ~On [the item] ~] say__p=1;! [2: ~On ~] ParaContent(); print "On ";! [3: the item] ParaContent(); print (the) tmp_0;! [4: ~ ~] ParaContent(); print " "; .L_Say780; .L_SayX767;rtrue; ]; Array TX_S_176 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_176; [ R_TX_S_177 tmp_0 ! Let/loop value, e.g., 'item': thing tmp_1 ! Let/loop value: thing tmp_2 ! Let/loop value: thing ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; #ifdef DEBUG; if (suppress_text_substitution) { print "~On [the item] ~"; rtrue; } #endif; ! DEBUG ! [1: ~On [the item] ~] say__p=1;! [2: ~On ~] ParaContent(); print "On ";! [3: the item] ParaContent(); print (the) tmp_0;! [4: ~ ~] ParaContent(); print " "; .L_Say781; .L_SayX768;rtrue; ]; Array TX_S_177 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_177; [ R_TX_S_178 tmp_0 ! Let/loop value, e.g., 'item': thing tmp_1 ! Let/loop value: thing tmp_2 ! Let/loop value: thing ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; #ifdef DEBUG; if (suppress_text_substitution) { print "~On [the item] ~"; rtrue; } #endif; ! DEBUG ! [1: ~On [the item] ~] say__p=1;! [2: ~On ~] ParaContent(); print "On ";! [3: the item] ParaContent(); print (the) tmp_0;! [4: ~ ~] ParaContent(); print " "; .L_Say782; .L_SayX769;rtrue; ]; Array TX_S_178 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_178; [ R_TX_S_179 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [are] carrying nothing.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [are] carrying nothing.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ carrying nothing.~] ParaContent(); print " carrying nothing."; .L_Say783; .L_SayX770;rtrue; ]; Array TX_S_179 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_179; [ R_TX_S_180 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [are] carrying:[line break]~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [are] carrying:[line break]~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ carrying:~] ParaContent(); print " carrying:";! [6: line break] ParaContent(); new_line; .L_Say784; .L_SayX771;rtrue; ]; Array TX_S_180 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_180; [ R_TX_S_181 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [look] through [their] possessions.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [look] through [their] possessions.~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: look] ConjugateVerb_43(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ through ~] ParaContent(); print " through ";! [6: their] ParaContent(); (PHR_779_r27 ());! [7: ~ possessions.~] ParaContent(); print " possessions."; .L_Say785; .L_SayX772;rtrue; ]; Array TX_S_181 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_181; [ R_TX_S_182 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [are] always self-possessed.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [are] always self-possessed.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ always self-possessed.~] ParaContent(); print " always self-possessed."; .L_Say786; .L_SayX773;rtrue; ]; Array TX_S_182 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_182; [ R_TX_S_183 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~I don't suppose [the noun] [would care] for that.~"; rtrue; } #endif; ! DEBUG ! [1: ~I don't suppose [the noun] [would care] for that.~] say__p=1;! [2: ~I don't suppose ~] ParaContent(); print "I don't suppose ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ ~] ParaContent(); print " ";! [5: would care] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_24); say__p=1; ! [6: ~ for that.~] ParaContent(); print " for that."; .L_Say787; .L_SayX774;rtrue; ]; Array TX_S_183 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_183; [ R_TX_S_184 tmp_0 ! Let/loop value, e.g., 'whole': thing ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [seem] to be a part of [the whole].~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [seem] to be a part of [the whole].~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: seem] ConjugateVerb_55(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ to be a part of ~] ParaContent(); print " to be a part of ";! [7: the whole] ParaContent(); print (the) tmp_0;! [8: ~.~] ParaContent(); print "."; .L_Say788; .L_SayX775;rtrue; ]; Array TX_S_184 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_184; [ R_TX_S_185 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'owner': object ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [seem] to belong to [the owner].~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [seem] to belong to [the owner].~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: seem] ConjugateVerb_55(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ to belong to ~] ParaContent(); print " to belong to ";! [7: the owner] ParaContent(); print (the) tmp_1;! [8: ~.~] ParaContent(); print "."; .L_Say789; .L_SayX776;rtrue; ]; Array TX_S_185 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_185; [ R_TX_S_186 tmp_0 ! Let/loop value, e.g., 'H': object ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [aren't] available.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [aren't] available.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ available.~] ParaContent(); print " available."; .L_Say790; .L_SayX777;rtrue; ]; Array TX_S_186 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_186; [ R_TX_S_187 tmp_0 ! Let/loop value, e.g., 'local ceiling': object ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [would have] to get [if noun is a supporter]off[otherwise]out of[end if] [the noun] first.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [would have] to get [if noun is a supporter]off[otherwise]out of[end if] [the noun] first.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: would have] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_2); say__p=1; ! [5: ~ to get ~] ParaContent(); print " to get ";! [6: if noun is a supporter] if (~~((((noun ofclass K6_supporter))))) jump L_Say791;! [7: ~off~] ParaContent(); print "off";! [8: otherwise] jump L_SayX778; .L_Say791;! [9: ~out of~] ParaContent(); print "out of";! [10: end if] .L_Say792; .L_SayX778;! [11: ~ ~] ParaContent(); print " ";! [12: the noun] ParaContent(); print (the) noun;! [13: ~ first.~] ParaContent(); print " first."; .L_Say793; .L_SayX779;rtrue; ]; Array TX_S_187 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_187; [ R_TX_S_188 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] already [have] [regarding the noun][those].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] already [have] [regarding the noun][those].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ already ~] ParaContent(); print " already ";! [4: have] ConjugateVerb_2(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [7: those] ParaContent(); (PHR_773_r21 ());! [8: ~.~] ParaContent(); print "."; .L_Say794; .L_SayX780;rtrue; ]; Array TX_S_188 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_188; [ R_TX_S_189 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] hardly portable.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] hardly portable.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ hardly portable.~] ParaContent(); print " hardly portable."; .L_Say795; .L_SayX781;rtrue; ]; Array TX_S_189 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_189; [ R_TX_S_190 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [cannot] carry [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [cannot] carry [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: cannot] ConjugateVerb_15(CV_NEG, PNToVP(), story_tense); say__p=1; ! [5: ~ carry ~] ParaContent(); print " carry ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say796; .L_SayX782;rtrue; ]; Array TX_S_190 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_190; [ R_TX_S_191 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] fixed in place.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] fixed in place.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ fixed in place.~] ParaContent(); print " fixed in place."; .L_Say797; .L_SayX783;rtrue; ]; Array TX_S_191 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_191; [ R_TX_S_192 tmp_0 ! Let/loop value, e.g., 'current working sack': player's holdall tmp_1 ! Let/loop value, e.g., 'transferred item': object tmp_2 ! Let/loop value: thing tmp_3 ! Let/loop value: thing ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; tmp_3=LocalParking-->3; #ifdef DEBUG; if (suppress_text_substitution) { print "~(putting [the transferred item] into [the current working sack] to make room)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(putting [the transferred item] into [the current working sack] to make room)[command clarification break]~] say__p=1;! [2: ~(putting ~] ParaContent(); print "(putting ";! [3: the transferred item] ParaContent(); print (the) tmp_1;! [4: ~ into ~] ParaContent(); print " into ";! [5: the current working sack] ParaContent(); print (the) tmp_0;! [6: ~ to make room)~] ParaContent(); print " to make room)";! [7: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say798; .L_SayX784;rtrue; ]; Array TX_S_192 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_192; [ R_TX_S_193 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We]['re] carrying too many things already.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We]['re] carrying too many things already.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ carrying too many things already.~] ParaContent(); print " carrying too many things already."; .L_Say799; .L_SayX785;rtrue; ]; Array TX_S_193 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_193; [ R_TX_S_194 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Taken.~"; rtrue; } #endif; ! DEBUG ! [1: ~Taken.~] say__p=1;! [2: ~Taken.~] ParaContent(); print "Taken."; .L_Say800; .L_SayX786;rtrue; ]; Array TX_S_194 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_194; [ R_TX_S_195 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [pick] up [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [pick] up [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: pick] ConjugateVerb_47(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ up ~] ParaContent(); print " up ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say801; .L_SayX787;rtrue; ]; Array TX_S_195 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_195; [ R_TX_S_196 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~But [regarding the noun][they] [aren't] there now.~"; rtrue; } #endif; ! DEBUG ! [1: ~But [regarding the noun][they] [aren't] there now.~] say__p=1;! [2: ~But ~] ParaContent(); print "But ";! [3: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [4: they] ParaContent(); (PHR_777_r25 ());! [5: ~ ~] ParaContent(); print " ";! [6: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [7: ~ there now.~] ParaContent(); print " there now."; .L_Say802; .L_SayX788;rtrue; ]; Array TX_S_196 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_196; [ R_TX_S_197 tmp_0 ! Let/loop value, e.g., 'owner': object ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [seem] to belong to [the owner].~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [seem] to belong to [the owner].~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: seem] ConjugateVerb_55(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ to belong to ~] ParaContent(); print " to belong to ";! [7: the owner] ParaContent(); print (the) tmp_0;! [8: ~.~] ParaContent(); print "."; .L_Say803; .L_SayX789;rtrue; ]; Array TX_S_197 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_197; [ R_TX_S_198 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't drop] part of [ourselves].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't drop] part of [ourselves].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't drop] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_28); say__p=1; ! [5: ~ part of ~] ParaContent(); print " part of ";! [6: ourselves] ParaContent(); (PHR_766_r14 ());! [7: ~.~] ParaContent(); print "."; .L_Say804; .L_SayX790;rtrue; ]; Array TX_S_198 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_198; [ R_TX_S_199 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [lack] the dexterity.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [lack] the dexterity.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: lack] ConjugateVerb_38(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ the dexterity.~] ParaContent(); print " the dexterity."; .L_Say805; .L_SayX791;rtrue; ]; Array TX_S_199 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_199; [ R_TX_S_200 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [are] already here.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [are] already here.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ already here.~] ParaContent(); print " already here."; .L_Say806; .L_SayX792;rtrue; ]; Array TX_S_200 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_200; [ R_TX_S_201 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [haven't] got [regarding the noun][those].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [haven't] got [regarding the noun][those].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: haven't] ConjugateVerb_78(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ got ~] ParaContent(); print " got ";! [6: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [7: those] ParaContent(); (PHR_773_r21 ());! [8: ~.~] ParaContent(); print "."; .L_Say807; .L_SayX793;rtrue; ]; Array TX_S_201 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_201; [ R_TX_S_202 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first taking [the noun] off)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first taking [the noun] off)[command clarification break]~] say__p=1;! [2: ~(first taking ~] ParaContent(); print "(first taking ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ off)~] ParaContent(); print " off)";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say808; .L_SayX794;rtrue; ]; Array TX_S_202 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_202; [ R_TX_S_203 tmp_0 ! Let/loop value, e.g., 'receptacle': object ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no more room on [the receptacle].~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no more room on [the receptacle].~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no more room on ~] ParaContent(); print " no more room on ";! [6: the receptacle] ParaContent(); print (the) tmp_0;! [7: ~.~] ParaContent(); print "."; .L_Say809; .L_SayX795;rtrue; ]; Array TX_S_203 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_203; [ R_TX_S_204 tmp_0 ! Let/loop value, e.g., 'receptacle': object ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no more room in [the receptacle].~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no more room in [the receptacle].~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no more room in ~] ParaContent(); print " no more room in ";! [6: the receptacle] ParaContent(); print (the) tmp_0;! [7: ~.~] ParaContent(); print "."; .L_Say810; .L_SayX796;rtrue; ]; Array TX_S_204 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_204; [ R_TX_S_205 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Dropped.~"; rtrue; } #endif; ! DEBUG ! [1: ~Dropped.~] say__p=1;! [2: ~Dropped.~] ParaContent(); print "Dropped."; .L_Say811; .L_SayX797;rtrue; ]; Array TX_S_205 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_205; [ R_TX_S_206 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [put] down [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [put] down [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: put] ConjugateVerb_51(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ down ~] ParaContent(); print " down ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say812; .L_SayX798;rtrue; ]; Array TX_S_206 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_206; [ R_TX_S_207 tmp_0 ! Let/loop value, e.g., 'noun-CPC': object tmp_1 ! Let/loop value, e.g., 'second-CPC': object tmp_2 ! Let/loop value, e.g., 'transfer ceiling': object ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't put] something on top of itself.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't put] something on top of itself.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't put] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_51); say__p=1; ! [5: ~ something on top of itself.~] ParaContent(); print " something on top of itself."; .L_Say813; .L_SayX799;rtrue; ]; Array TX_S_207 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_207; [ R_TX_S_208 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Putting things on [the second noun] [would achieve] nothing.~"; rtrue; } #endif; ! DEBUG ! [1: ~Putting things on [the second noun] [would achieve] nothing.~] say__p=1;! [2: ~Putting things on ~] ParaContent(); print "Putting things on ";! [3: the second noun] ParaContent(); print (the) second;! [4: ~ ~] ParaContent(); print " ";! [5: would achieve] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_21); say__p=1; ! [6: ~ nothing.~] ParaContent(); print " nothing."; .L_Say814; .L_SayX800;rtrue; ]; Array TX_S_208 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_208; [ R_TX_S_209 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first taking [regarding the noun][them] off)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first taking [regarding the noun][them] off)[command clarification break]~] say__p=1;! [2: ~(first taking ~] ParaContent(); print "(first taking ";! [3: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [4: them] ParaContent(); (PHR_781_r29 ());! [5: ~ off)~] ParaContent(); print " off)";! [6: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say815; .L_SayX801;rtrue; ]; Array TX_S_209 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_209; [ R_TX_S_210 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no more room on [the second noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no more room on [the second noun].~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no more room on ~] ParaContent(); print " no more room on ";! [6: the second noun] ParaContent(); print (the) second;! [7: ~.~] ParaContent(); print "."; .L_Say816; .L_SayX802;rtrue; ]; Array TX_S_210 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_210; [ R_TX_S_211 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Done.~"; rtrue; } #endif; ! DEBUG ! [1: ~Done.~] say__p=1;! [2: ~Done.~] ParaContent(); print "Done."; .L_Say817; .L_SayX803;rtrue; ]; Array TX_S_211 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_211; [ R_TX_S_212 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [put] [the noun] on [the second noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [put] [the noun] on [the second noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: put] ConjugateVerb_51(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ on ~] ParaContent(); print " on ";! [8: the second noun] ParaContent(); print (the) second;! [9: ~.~] ParaContent(); print "."; .L_Say818; .L_SayX804;rtrue; ]; Array TX_S_212 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_212; [ R_TX_S_213 tmp_0 ! Let/loop value, e.g., 'noun-CPC': object tmp_1 ! Let/loop value, e.g., 'second-CPC': object tmp_2 ! Let/loop value, e.g., 'transfer ceiling': object ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't put] something inside itself.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't put] something inside itself.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't put] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_51); say__p=1; ! [5: ~ something inside itself.~] ParaContent(); print " something inside itself."; .L_Say819; .L_SayX805;rtrue; ]; Array TX_S_213 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_213; [ R_TX_S_214 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The second noun] [are] closed.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The second noun] [are] closed.~] say__p=1;! [2: the second noun] ParaContent(); print (The) second;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ closed.~] ParaContent(); print " closed."; .L_Say820; .L_SayX806;rtrue; ]; Array TX_S_214 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_214; [ R_TX_S_215 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the second noun][Those] [can't contain] things.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the second noun][Those] [can't contain] things.~] say__p=1;! [2: regarding the second noun] ParaContent(); RegardingSingleObject(second);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: can't contain] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_7); say__p=1; ! [6: ~ things.~] ParaContent(); print " things."; .L_Say821; .L_SayX807;rtrue; ]; Array TX_S_215 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_215; [ R_TX_S_216 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first taking [regarding the noun][them] off)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first taking [regarding the noun][them] off)[command clarification break]~] say__p=1;! [2: ~(first taking ~] ParaContent(); print "(first taking ";! [3: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [4: them] ParaContent(); (PHR_781_r29 ());! [5: ~ off)~] ParaContent(); print " off)";! [6: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say822; .L_SayX808;rtrue; ]; Array TX_S_216 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_216; [ R_TX_S_217 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no more room in [the second noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no more room in [the second noun].~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no more room in ~] ParaContent(); print " no more room in ";! [6: the second noun] ParaContent(); print (the) second;! [7: ~.~] ParaContent(); print "."; .L_Say823; .L_SayX809;rtrue; ]; Array TX_S_217 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_217; [ R_TX_S_218 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Done.~"; rtrue; } #endif; ! DEBUG ! [1: ~Done.~] say__p=1;! [2: ~Done.~] ParaContent(); print "Done."; .L_Say824; .L_SayX810;rtrue; ]; Array TX_S_218 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_218; [ R_TX_S_219 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [put] [the noun] into [the second noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [put] [the noun] into [the second noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: put] ConjugateVerb_51(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ into ~] ParaContent(); print " into ";! [8: the second noun] ParaContent(); print (the) second;! [9: ~.~] ParaContent(); print "."; .L_Say825; .L_SayX811;rtrue; ]; Array TX_S_219 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_219; [ R_TX_S_220 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] plainly inedible.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] plainly inedible.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ plainly inedible.~] ParaContent(); print " plainly inedible."; .L_Say826; .L_SayX812;rtrue; ]; Array TX_S_220 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_220; [ R_TX_S_221 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first taking [the noun] off)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first taking [the noun] off)[command clarification break]~] say__p=1;! [2: ~(first taking ~] ParaContent(); print "(first taking ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ off)~] ParaContent(); print " off)";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say827; .L_SayX813;rtrue; ]; Array TX_S_221 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_221; [ R_TX_S_222 tmp_0 ! Let/loop value, e.g., 'owner': person ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The owner] [might not appreciate] that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The owner] [might not appreciate] that.~] say__p=1;! [2: the owner] ParaContent(); print (The) tmp_0;! [3: ~ ~] ParaContent(); print " ";! [4: might not appreciate] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense, ConjugateVerb_22); say__p=1; ! [5: ~ that.~] ParaContent(); print " that."; .L_Say828; .L_SayX814;rtrue; ]; Array TX_S_222 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_222; [ R_TX_S_223 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [eat] [the noun]. Not bad.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [eat] [the noun]. Not bad.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: eat] ConjugateVerb_29(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~. Not bad.~] ParaContent(); print ". Not bad."; .L_Say829; .L_SayX815;rtrue; ]; Array TX_S_223 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_223; [ R_TX_S_224 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [eat] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [eat] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: eat] ConjugateVerb_29(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say830; .L_SayX816;rtrue; ]; Array TX_S_224 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_224; [ R_TX_S_225 tmp_0 ! Let/loop value, e.g., 'chaise': supporter ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first getting off [the chaise])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first getting off [the chaise])[command clarification break]~] say__p=1;! [2: ~(first getting off ~] ParaContent(); print "(first getting off ";! [3: the chaise] ParaContent(); print (the) tmp_0;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say831; .L_SayX817;rtrue; ]; Array TX_S_225 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_225; [ R_TX_S_226 tmp_0 ! Let/loop value, e.g., 'nonvehicle': object ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [would have] to get off [the nonvehicle] first.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [would have] to get off [the nonvehicle] first.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: would have] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_2); say__p=1; ! [5: ~ to get off ~] ParaContent(); print " to get off ";! [6: the nonvehicle] ParaContent(); print (the) tmp_0;! [7: ~ first.~] ParaContent(); print " first."; .L_Say832; .L_SayX818;rtrue; ]; Array TX_S_226 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_226; [ R_TX_S_227 tmp_0 ! Let/loop value, e.g., 'nonvehicle': object ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [would have] to get out of [the nonvehicle] first.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [would have] to get out of [the nonvehicle] first.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: would have] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_2); say__p=1; ! [5: ~ to get out of ~] ParaContent(); print " to get out of ";! [6: the nonvehicle] ParaContent(); print (the) tmp_0;! [7: ~ first.~] ParaContent(); print " first."; .L_Say833; .L_SayX819;rtrue; ]; Array TX_S_227 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_227; [ R_TX_S_228 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't go] that way.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't go] that way.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't go] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_34); say__p=1; ! [5: ~ that way.~] ParaContent(); print " that way."; .L_Say834; .L_SayX820;rtrue; ]; Array TX_S_228 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_228; [ R_TX_S_229 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first opening [the door gone through])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first opening [the door gone through])[command clarification break]~] say__p=1;! [2: ~(first opening ~] ParaContent(); print "(first opening ";! [3: the door gone through] ParaContent(); print (the) (MStack-->MstVO(20007,2));! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say835; .L_SayX821;rtrue; ]; Array TX_S_229 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_229; [ R_TX_S_230 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't go] that way.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't go] that way.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't go] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_34); say__p=1; ! [5: ~ that way.~] ParaContent(); print " that way."; .L_Say836; .L_SayX822;rtrue; ]; Array TX_S_230 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_230; [ R_TX_S_231 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't], since [the door gone through] [lead] nowhere.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't], since [the door gone through] [lead] nowhere.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't] ConjugateVerb_77(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~, since ~] ParaContent(); print ", since ";! [6: the door gone through] ParaContent(); print (the) (MStack-->MstVO(20007,2));! [7: ~ ~] ParaContent(); print " ";! [8: lead] ConjugateVerb_39(CV_POS, PNToVP(), story_tense); say__p=1; ! [9: ~ nowhere.~] ParaContent(); print " nowhere."; .L_Say837; .L_SayX823;rtrue; ]; Array TX_S_231 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_231; [ R_TX_S_232 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [go] up~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [go] up~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: go] ConjugateVerb_34(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ up~] ParaContent(); print " up"; .L_Say838; .L_SayX824;rtrue; ]; Array TX_S_232 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_232; [ R_TX_S_233 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [go] down~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [go] down~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: go] ConjugateVerb_34(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ down~] ParaContent(); print " down"; .L_Say839; .L_SayX825;rtrue; ]; Array TX_S_233 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_233; [ R_TX_S_234 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [go] [noun]~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [go] [noun]~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: go] ConjugateVerb_34(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: noun] ParaContent(); PrintShortName(noun); .L_Say840; .L_SayX826;rtrue; ]; Array TX_S_234 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_234; [ R_TX_S_235 tmp_0 ! Let/loop value, e.g., 'back way': direction tmp_1 ! Let/loop value, e.g., 'room back the other way': room tmp_2 ! Let/loop value, e.g., 'room normally this way': room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive] from above~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive] from above~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ from above~] ParaContent(); print " from above"; .L_Say841; .L_SayX827;rtrue; ]; Array TX_S_235 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_235; [ R_TX_S_236 tmp_0 ! Let/loop value, e.g., 'back way': direction tmp_1 ! Let/loop value, e.g., 'room back the other way': room tmp_2 ! Let/loop value, e.g., 'room normally this way': room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive] from below~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive] from below~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ from below~] ParaContent(); print " from below"; .L_Say842; .L_SayX828;rtrue; ]; Array TX_S_236 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_236; [ R_TX_S_237 tmp_0 ! Let/loop value, e.g., 'back way': direction tmp_1 ! Let/loop value, e.g., 'room back the other way': room tmp_2 ! Let/loop value, e.g., 'room normally this way': room ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive] from [the back way]~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive] from [the back way]~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ from ~] ParaContent(); print " from ";! [6: the back way] ParaContent(); print (the) tmp_0; .L_Say843; .L_SayX829;rtrue; ]; Array TX_S_237 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_237; [ R_TX_S_238 tmp_0 ! Let/loop value, e.g., 'back way': direction tmp_1 ! Let/loop value, e.g., 'room back the other way': room tmp_2 ! Let/loop value, e.g., 'room normally this way': room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive]~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive]~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; .L_Say844; .L_SayX830;rtrue; ]; Array TX_S_238 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_238; [ R_TX_S_239 tmp_0 ! Let/loop value, e.g., 'back way': direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive] at [the room gone to] from above~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive] at [the room gone to] from above~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ at ~] ParaContent(); print " at ";! [6: the room gone to] ParaContent(); print (the) (MStack-->MstVO(20007,1));! [7: ~ from above~] ParaContent(); print " from above"; .L_Say845; .L_SayX831;rtrue; ]; Array TX_S_239 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_239; [ R_TX_S_240 tmp_0 ! Let/loop value, e.g., 'back way': direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive] at [the room gone to] from below~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive] at [the room gone to] from below~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ at ~] ParaContent(); print " at ";! [6: the room gone to] ParaContent(); print (the) (MStack-->MstVO(20007,1));! [7: ~ from below~] ParaContent(); print " from below"; .L_Say846; .L_SayX832;rtrue; ]; Array TX_S_240 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_240; [ R_TX_S_241 tmp_0 ! Let/loop value, e.g., 'back way': direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; tmp_2=LocalParking-->2; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive] at [the room gone to] from [the back way]~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive] at [the room gone to] from [the back way]~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ at ~] ParaContent(); print " at ";! [6: the room gone to] ParaContent(); print (the) (MStack-->MstVO(20007,1));! [7: ~ from ~] ParaContent(); print " from ";! [8: the back way] ParaContent(); print (the) tmp_0; .L_Say847; .L_SayX833;rtrue; ]; Array TX_S_241 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_241; [ R_TX_S_242 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [go] through [the noun]~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [go] through [the noun]~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: go] ConjugateVerb_34(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ through ~] ParaContent(); print " through ";! [6: the noun] ParaContent(); print (the) noun; .L_Say848; .L_SayX834;rtrue; ]; Array TX_S_242 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_242; [ R_TX_S_243 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [arrive] from [the noun]~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [arrive] from [the noun]~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: arrive] ConjugateVerb_23(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ from ~] ParaContent(); print " from ";! [6: the noun] ParaContent(); print (the) noun; .L_Say849; .L_SayX835;rtrue; ]; Array TX_S_243 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_243; [ R_TX_S_244 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~on [the vehicle gone by]~"; rtrue; } #endif; ! DEBUG ! [1: ~on [the vehicle gone by]~] say__p=1;! [2: ~on ~] ParaContent(); print "on ";! [3: the vehicle gone by] ParaContent(); print (the) (MStack-->MstVO(20007,3)); .L_Say850; .L_SayX836;rtrue; ]; Array TX_S_244 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_244; [ R_TX_S_245 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~in [the vehicle gone by]~"; rtrue; } #endif; ! DEBUG ! [1: ~in [the vehicle gone by]~] say__p=1;! [2: ~in ~] ParaContent(); print "in ";! [3: the vehicle gone by] ParaContent(); print (the) (MStack-->MstVO(20007,3)); .L_Say851; .L_SayX837;rtrue; ]; Array TX_S_245 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_245; [ R_TX_S_246 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, pushing [the thing gone with] in front, and [us] along too~"; rtrue; } #endif; ! DEBUG ! [1: ~, pushing [the thing gone with] in front, and [us] along too~] say__p=1;! [2: ~, pushing ~] ParaContent(); print ", pushing ";! [3: the thing gone with] ParaContent(); print (the) (MStack-->MstVO(20007,4));! [4: ~ in front, and ~] ParaContent(); print " in front, and ";! [5: us] ParaContent(); (PHR_764_r12 ());! [6: ~ along too~] ParaContent(); print " along too"; .L_Say852; .L_SayX838;rtrue; ]; Array TX_S_246 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_246; [ R_TX_S_247 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, pushing [the thing gone with] in front~"; rtrue; } #endif; ! DEBUG ! [1: ~, pushing [the thing gone with] in front~] say__p=1;! [2: ~, pushing ~] ParaContent(); print ", pushing ";! [3: the thing gone with] ParaContent(); print (the) (MStack-->MstVO(20007,4));! [4: ~ in front~] ParaContent(); print " in front"; .L_Say853; .L_SayX839;rtrue; ]; Array TX_S_247 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_247; [ R_TX_S_248 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, pushing [the thing gone with] away~"; rtrue; } #endif; ! DEBUG ! [1: ~, pushing [the thing gone with] away~] say__p=1;! [2: ~, pushing ~] ParaContent(); print ", pushing ";! [3: the thing gone with] ParaContent(); print (the) (MStack-->MstVO(20007,4));! [4: ~ away~] ParaContent(); print " away"; .L_Say854; .L_SayX840;rtrue; ]; Array TX_S_248 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_248; [ R_TX_S_249 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, pushing [the thing gone with] in~"; rtrue; } #endif; ! DEBUG ! [1: ~, pushing [the thing gone with] in~] say__p=1;! [2: ~, pushing ~] ParaContent(); print ", pushing ";! [3: the thing gone with] ParaContent(); print (the) (MStack-->MstVO(20007,4));! [4: ~ in~] ParaContent(); print " in"; .L_Say855; .L_SayX841;rtrue; ]; Array TX_S_249 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_249; [ R_TX_S_250 tmp_0 ! Let/loop value: direction tmp_1 ! Let/loop value: room tmp_2 ! Let/loop value: room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~, taking [us] along~"; rtrue; } #endif; ! DEBUG ! [1: ~, taking [us] along~] say__p=1;! [2: ~, taking ~] ParaContent(); print ", taking ";! [3: us] ParaContent(); (PHR_764_r12 ());! [4: ~ along~] ParaContent(); print " along"; .L_Say856; .L_SayX842;rtrue; ]; Array TX_S_250 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_250; [ R_TX_S_251 tmp_0 ! Let/loop value, e.g., 'local ceiling': object ; #ifdef DEBUG; if (suppress_text_substitution) { print "~But [we]['re] already on [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~But [we]['re] already on [the noun].~] say__p=1;! [2: ~But ~] ParaContent(); print "But ";! [3: we] ParaContent(); (PHR_763_r11 ());! [4: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ already on ~] ParaContent(); print " already on ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say857; .L_SayX843;rtrue; ]; Array TX_S_251 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_251; [ R_TX_S_252 tmp_0 ! Let/loop value, e.g., 'local ceiling': object ; #ifdef DEBUG; if (suppress_text_substitution) { print "~But [we]['re] already in [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~But [we]['re] already in [the noun].~] say__p=1;! [2: ~But ~] ParaContent(); print "But ";! [3: we] ParaContent(); (PHR_763_r11 ());! [4: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ already in ~] ParaContent(); print " already in ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say858; .L_SayX844;rtrue; ]; Array TX_S_252 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_252; [ R_TX_S_253 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] not something [we] [can] stand on.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] not something [we] [can] stand on.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ not something ~] ParaContent(); print " not something ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " ";! [7: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [8: ~ stand on.~] ParaContent(); print " stand on."; .L_Say859; .L_SayX845;rtrue; ]; Array TX_S_253 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_253; [ R_TX_S_254 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] not something [we] [can] sit down on.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] not something [we] [can] sit down on.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ not something ~] ParaContent(); print " not something ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " ";! [7: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [8: ~ sit down on.~] ParaContent(); print " sit down on."; .L_Say860; .L_SayX846;rtrue; ]; Array TX_S_254 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_254; [ R_TX_S_255 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] not something [we] [can] lie down on.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] not something [we] [can] lie down on.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ not something ~] ParaContent(); print " not something ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " ";! [7: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [8: ~ lie down on.~] ParaContent(); print " lie down on."; .L_Say861; .L_SayX847;rtrue; ]; Array TX_S_255 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_255; [ R_TX_S_256 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] not something [we] [can] enter.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] not something [we] [can] enter.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ not something ~] ParaContent(); print " not something ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " ";! [7: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [8: ~ enter.~] ParaContent(); print " enter."; .L_Say862; .L_SayX848;rtrue; ]; Array TX_S_256 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_256; [ R_TX_S_257 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't get] into the closed [noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't get] into the closed [noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't get] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_32); say__p=1; ! [5: ~ into the closed ~] ParaContent(); print " into the closed ";! [6: noun] ParaContent(); PrintShortName(noun);! [7: ~.~] ParaContent(); print "."; .L_Say863; .L_SayX849;rtrue; ]; Array TX_S_257 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_257; [ R_TX_S_258 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no more room on [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no more room on [the noun].~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no more room on ~] ParaContent(); print " no more room on ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say864; .L_SayX850;rtrue; ]; Array TX_S_258 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_258; [ R_TX_S_259 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no more room in [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no more room in [the noun].~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no more room in ~] ParaContent(); print " no more room in ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say865; .L_SayX851;rtrue; ]; Array TX_S_259 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_259; [ R_TX_S_260 tmp_0 ! Let/loop value, e.g., 'local ceiling': object ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can] only get into something free-standing.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can] only get into something free-standing.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ only get into something free-standing.~] ParaContent(); print " only get into something free-standing."; .L_Say866; .L_SayX852;rtrue; ]; Array TX_S_260 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_260; [ R_TX_S_261 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'current home': object ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~(getting off [the current home])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(getting off [the current home])[command clarification break]~] say__p=1;! [2: ~(getting off ~] ParaContent(); print "(getting off ";! [3: the current home] ParaContent(); print (the) tmp_1;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say867; .L_SayX853;rtrue; ]; Array TX_S_261 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_261; [ R_TX_S_262 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'current home': object ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~(getting out of [the current home])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(getting out of [the current home])[command clarification break]~] say__p=1;! [2: ~(getting out of ~] ParaContent(); print "(getting out of ";! [3: the current home] ParaContent(); print (the) tmp_1;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say868; .L_SayX854;rtrue; ]; Array TX_S_262 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_262; [ R_TX_S_263 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'target': object ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~(getting onto [the target])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(getting onto [the target])[command clarification break]~] say__p=1;! [2: ~(getting onto ~] ParaContent(); print "(getting onto ";! [3: the target] ParaContent(); print (the) tmp_1;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say869; .L_SayX855;rtrue; ]; Array TX_S_263 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_263; [ R_TX_S_264 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'target': object ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~(getting into [the target])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(getting into [the target])[command clarification break]~] say__p=1;! [2: ~(getting into ~] ParaContent(); print "(getting into ";! [3: the target] ParaContent(); print (the) tmp_1;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say870; .L_SayX856;rtrue; ]; Array TX_S_264 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_264; [ R_TX_S_265 tmp_0 ! Let/loop value, e.g., 'local ceiling': object tmp_1 ! Let/loop value, e.g., 'target': object ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~(entering [the target])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(entering [the target])[command clarification break]~] say__p=1;! [2: ~(entering ~] ParaContent(); print "(entering ";! [3: the target] ParaContent(); print (the) tmp_1;! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say871; .L_SayX857;rtrue; ]; Array TX_S_265 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_265; [ R_TX_S_266 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [get] onto [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [get] onto [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ onto ~] ParaContent(); print " onto ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say872; .L_SayX858;rtrue; ]; Array TX_S_266 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_266; [ R_TX_S_267 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [get] into [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [get] into [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ into ~] ParaContent(); print " into ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say873; .L_SayX859;rtrue; ]; Array TX_S_267 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_267; [ R_TX_S_268 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [get] into [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [get] into [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ into ~] ParaContent(); print " into ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say874; .L_SayX860;rtrue; ]; Array TX_S_268 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_268; [ R_TX_S_269 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [get] onto [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [get] onto [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ onto ~] ParaContent(); print " onto ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say875; .L_SayX861;rtrue; ]; Array TX_S_269 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_269; [ R_TX_S_270 tmp_0 ! Let/loop value, e.g., 'local room': room ; #ifdef DEBUG; if (suppress_text_substitution) { print "~But [we] [aren't] in anything at the [if story tense is present tense]moment[otherwise]time[end if].~"; rtrue; } #endif; ! DEBUG ! [1: ~But [we] [aren't] in anything at the [if story tense is present tense]moment[otherwise]time[end if].~] say__p=1;! [2: ~But ~] ParaContent(); print "But ";! [3: we] ParaContent(); (PHR_763_r11 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ in anything at the ~] ParaContent(); print " in anything at the ";! [7: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say876;! [8: ~moment~] ParaContent(); print "moment";! [9: otherwise] jump L_SayX862; .L_Say876;! [10: ~time~] ParaContent(); print "time";! [11: end if] .L_Say877; .L_SayX862;! [12: ~.~] ParaContent(); print "."; .L_Say878; .L_SayX863;rtrue; ]; Array TX_S_270 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_270; [ R_TX_S_271 tmp_0 ! Let/loop value, e.g., 'cage': container ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~You can't get out of the closed [cage].~"; rtrue; } #endif; ! DEBUG ! [1: ~You can't get out of the closed [cage].~] say__p=1;! [2: ~You can't get out of the closed ~] ParaContent(); print "You can't get out of the closed ";! [3: cage] ParaContent(); PrintShortName(tmp_0);! [4: ~.~] ParaContent(); print "."; .L_Say879; .L_SayX864;rtrue; ]; Array TX_S_271 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_271; [ R_TX_S_272 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [get] off [the container exited from].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [get] off [the container exited from].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ off ~] ParaContent(); print " off ";! [6: the container exited from] ParaContent(); print (the) (MStack-->MstVO(20009,0));! [7: ~.~] ParaContent(); print "."; .L_Say880; .L_SayX865;rtrue; ]; Array TX_S_272 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_272; [ R_TX_S_273 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [get] out of [the container exited from].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [get] out of [the container exited from].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ out of ~] ParaContent(); print " out of ";! [6: the container exited from] ParaContent(); print (the) (MStack-->MstVO(20009,0));! [7: ~.~] ParaContent(); print "."; .L_Say881; .L_SayX866;rtrue; ]; Array TX_S_273 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_273; [ R_TX_S_274 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [get] out of [the container exited from].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [get] out of [the container exited from].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ out of ~] ParaContent(); print " out of ";! [6: the container exited from] ParaContent(); print (the) (MStack-->MstVO(20009,0));! [7: ~.~] ParaContent(); print "."; .L_Say882; .L_SayX867;rtrue; ]; Array TX_S_274 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_274; [ R_TX_S_275 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~But [we] [aren't] on [the noun] at the [if story tense is present tense]moment[otherwise]time[end if].~"; rtrue; } #endif; ! DEBUG ! [1: ~But [we] [aren't] on [the noun] at the [if story tense is present tense]moment[otherwise]time[end if].~] say__p=1;! [2: ~But ~] ParaContent(); print "But ";! [3: we] ParaContent(); (PHR_763_r11 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ on ~] ParaContent(); print " on ";! [7: the noun] ParaContent(); print (the) noun;! [8: ~ at the ~] ParaContent(); print " at the ";! [9: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say883;! [10: ~moment~] ParaContent(); print "moment";! [11: otherwise] jump L_SayX868; .L_Say883;! [12: ~time~] ParaContent(); print "time";! [13: end if] .L_Say884; .L_SayX868;! [14: ~.~] ParaContent(); print "."; .L_Say885; .L_SayX869;rtrue; ]; Array TX_S_275 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_275; [ R_TX_S_276 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [get] off [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [get] off [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: get] ConjugateVerb_32(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ off ~] ParaContent(); print " off ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say886; .L_SayX870;rtrue; ]; Array TX_S_276 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_276; [ R_TX_S_277 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Darkness~"; rtrue; } #endif; ! DEBUG ! [1: ~Darkness~] say__p=1;! [2: ~Darkness~] ParaContent(); print "Darkness"; .L_Say887; .L_SayX871;rtrue; ]; Array TX_S_277 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_277; [ R_TX_S_278 tmp_0 ! Let/loop value, e.g., 'intermediate level': object tmp_1 ! Let/loop value, e.g., 'intermediate level count': number ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~ (on [the intermediate level])~"; rtrue; } #endif; ! DEBUG ! [1: ~ (on [the intermediate level])~] say__p=1;! [2: ~ (on ~] ParaContent(); print " (on ";! [3: the intermediate level] ParaContent(); print (the) tmp_0;! [4: ~)~] ParaContent(); print ")"; .L_Say888; .L_SayX872;rtrue; ]; Array TX_S_278 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_278; [ R_TX_S_279 tmp_0 ! Let/loop value, e.g., 'intermediate level': object tmp_1 ! Let/loop value, e.g., 'intermediate level count': number ; tmp_0=LocalParking-->0; tmp_1=LocalParking-->1; #ifdef DEBUG; if (suppress_text_substitution) { print "~ (in [the intermediate level])~"; rtrue; } #endif; ! DEBUG ! [1: ~ (in [the intermediate level])~] say__p=1;! [2: ~ (in ~] ParaContent(); print " (in ";! [3: the intermediate level] ParaContent(); print (the) tmp_0;! [4: ~)~] ParaContent(); print ")"; .L_Say889; .L_SayX873;rtrue; ]; Array TX_S_279 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_279; [ R_TX_S_280 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[It] [are] pitch dark, and [we] [can't see] a thing.~"; rtrue; } #endif; ! DEBUG ! [1: ~[It] [are] pitch dark, and [we] [can't see] a thing.~] say__p=1;! [2: it] ParaContent(); (PHR_789_r37 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ pitch dark, and ~] ParaContent(); print " pitch dark, and ";! [6: we] ParaContent(); (PHR_763_r11 ());! [7: ~ ~] ParaContent(); print " ";! [8: can't see] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_16); say__p=1; ! [9: ~ a thing.~] ParaContent(); print " a thing."; .L_Say890; .L_SayX874;rtrue; ]; Array TX_S_280 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_280; [ R_TX_S_281 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [look] around.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [look] around.~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: look] ConjugateVerb_43(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ around.~] ParaContent(); print " around."; .L_Say891; .L_SayX875;rtrue; ]; Array TX_S_281 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_281; [ R_TX_S_282 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [see] nothing unexpected in that direction.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [see] nothing unexpected in that direction.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: see] ConjugateVerb_16(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing unexpected in that direction.~] ParaContent(); print " nothing unexpected in that direction."; .L_Say892; .L_SayX876;rtrue; ]; Array TX_S_282 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_282; [ R_TX_S_283 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~In [the noun] ~"; rtrue; } #endif; ! DEBUG ! [1: ~In [the noun] ~] say__p=1;! [2: ~In ~] ParaContent(); print "In ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ ~] ParaContent(); print " "; .L_Say893; .L_SayX877;rtrue; ]; Array TX_S_283 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_283; [ R_TX_S_284 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [are] empty.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [are] empty.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ empty.~] ParaContent(); print " empty."; .L_Say894; .L_SayX878;rtrue; ]; Array TX_S_284 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_284; [ R_TX_S_285 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~On [the noun] ~"; rtrue; } #endif; ! DEBUG ! [1: ~On [the noun] ~] say__p=1;! [2: ~On ~] ParaContent(); print "On ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ ~] ParaContent(); print " "; .L_Say895; .L_SayX879;rtrue; ]; Array TX_S_285 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_285; [ R_TX_S_286 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [are] [if story tense is present tense]currently [end if]switched [if the noun is switched on]on[otherwise]off[end if].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [are] [if story tense is present tense]currently [end if]switched [if the noun is switched on]on[otherwise]off[end if].~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say896;! [7: ~currently ~] ParaContent(); print "currently ";! [8: end if] .L_Say896; .L_SayX880;! [9: ~switched ~] ParaContent(); print "switched ";! [10: if the noun is switched on] if (~~(((((Adj_84_t1_v10(noun))))))) jump L_Say897;! [11: ~on~] ParaContent(); print "on";! [12: otherwise] jump L_SayX881; .L_Say897;! [13: ~off~] ParaContent(); print "off";! [14: end if] .L_Say898; .L_SayX881;! [15: ~.~] ParaContent(); print "."; .L_Say899; .L_SayX882;rtrue; ]; Array TX_S_286 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_286; [ R_TX_S_287 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [see] nothing special about [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [see] nothing special about [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: see] ConjugateVerb_16(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing special about ~] ParaContent(); print " nothing special about ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say900; .L_SayX883;rtrue; ]; Array TX_S_287 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_287; [ R_TX_S_288 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [look] closely at [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [look] closely at [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: look] ConjugateVerb_43(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ closely at ~] ParaContent(); print " closely at ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say901; .L_SayX884;rtrue; ]; Array TX_S_288 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_288; [ R_TX_S_289 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [find] nothing of interest.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [find] nothing of interest.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: find] ConjugateVerb_31(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing of interest.~] ParaContent(); print " nothing of interest."; .L_Say902; .L_SayX885;rtrue; ]; Array TX_S_289 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_289; [ R_TX_S_290 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [look] under [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [look] under [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: look] ConjugateVerb_43(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ under ~] ParaContent(); print " under ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say903; .L_SayX886;rtrue; ]; Array TX_S_290 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_290; [ R_TX_S_291 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [find] nothing of interest.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [find] nothing of interest.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: find] ConjugateVerb_31(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing of interest.~] ParaContent(); print " nothing of interest."; .L_Say904; .L_SayX887;rtrue; ]; Array TX_S_291 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_291; [ R_TX_S_292 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't see] inside, since [the noun] [are] closed.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't see] inside, since [the noun] [are] closed.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't see] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_16); say__p=1; ! [5: ~ inside, since ~] ParaContent(); print " inside, since ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ ~] ParaContent(); print " ";! [8: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [9: ~ closed.~] ParaContent(); print " closed."; .L_Say905; .L_SayX888;rtrue; ]; Array TX_S_292 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_292; [ R_TX_S_293 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~In [the noun] ~"; rtrue; } #endif; ! DEBUG ! [1: ~In [the noun] ~] say__p=1;! [2: ~In ~] ParaContent(); print "In ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ ~] ParaContent(); print " "; .L_Say906; .L_SayX889;rtrue; ]; Array TX_S_293 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_293; [ R_TX_S_294 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [are] empty.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [are] empty.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ empty.~] ParaContent(); print " empty."; .L_Say907; .L_SayX890;rtrue; ]; Array TX_S_294 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_294; [ R_TX_S_295 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~On [the noun] ~"; rtrue; } #endif; ! DEBUG ! [1: ~On [the noun] ~] say__p=1;! [2: ~On ~] ParaContent(); print "On ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ ~] ParaContent(); print " "; .L_Say908; .L_SayX891;rtrue; ]; Array TX_S_295 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_295; [ R_TX_S_296 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] nothing on [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] nothing on [the noun].~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing on ~] ParaContent(); print " nothing on ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say909; .L_SayX892;rtrue; ]; Array TX_S_296 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_296; [ R_TX_S_297 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [search] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [search] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: search] ConjugateVerb_54(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say910; .L_SayX893;rtrue; ]; Array TX_S_297 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_297; [ R_TX_S_298 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [discover] nothing of interest in [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [discover] nothing of interest in [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: discover] ConjugateVerb_27(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing of interest in ~] ParaContent(); print " nothing of interest in ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say911; .L_SayX894;rtrue; ]; Array TX_S_298 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_298; [ R_TX_S_299 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [look] at [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [look] at [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: look] ConjugateVerb_43(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ at ~] ParaContent(); print " at ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say912; .L_SayX895;rtrue; ]; Array TX_S_299 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_299; [ R_TX_S_300 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [don't] seem to be something [we] [can] lock.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [don't] seem to be something [we] [can] lock.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: don't] ConjugateVerb_79(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ seem to be something ~] ParaContent(); print " seem to be something ";! [7: we] ParaContent(); (PHR_763_r11 ());! [8: ~ ~] ParaContent(); print " ";! [9: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [10: ~ lock.~] ParaContent(); print " lock."; .L_Say913; .L_SayX896;rtrue; ]; Array TX_S_300 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_300; [ R_TX_S_301 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] locked at the [if story tense is present tense]moment[otherwise]time[end if].~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] locked at the [if story tense is present tense]moment[otherwise]time[end if].~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ locked at the ~] ParaContent(); print " locked at the ";! [5: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say914;! [6: ~moment~] ParaContent(); print "moment";! [7: otherwise] jump L_SayX897; .L_Say914;! [8: ~time~] ParaContent(); print "time";! [9: end if] .L_Say915; .L_SayX897;! [10: ~.~] ParaContent(); print "."; .L_Say916; .L_SayX898;rtrue; ]; Array TX_S_301 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_301; [ R_TX_S_302 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~First [we] [would have] to close [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~First [we] [would have] to close [the noun].~] say__p=1;! [2: ~First ~] ParaContent(); print "First ";! [3: we] ParaContent(); (PHR_763_r11 ());! [4: ~ ~] ParaContent(); print " ";! [5: would have] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_2); say__p=1; ! [6: ~ to close ~] ParaContent(); print " to close ";! [7: the noun] ParaContent(); print (the) noun;! [8: ~.~] ParaContent(); print "."; .L_Say917; .L_SayX899;rtrue; ]; Array TX_S_302 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_302; [ R_TX_S_303 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The second noun] [do not fit] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The second noun] [do not fit] [the noun].~] say__p=1;! [2: the second noun] ParaContent(); print (The) second;! [3: ~ ~] ParaContent(); print " ";! [4: do not fit] ConjugateVerb_87(CV_NEG, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say918; .L_SayX900;rtrue; ]; Array TX_S_303 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_303; [ R_TX_S_304 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [lock] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [lock] [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: lock] ConjugateVerb_42(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say919; .L_SayX901;rtrue; ]; Array TX_S_304 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_304; [ R_TX_S_305 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [lock] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [lock] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: lock] ConjugateVerb_42(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say920; .L_SayX902;rtrue; ]; Array TX_S_305 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_305; [ R_TX_S_306 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][Those] [don't] seem to be something [we] [can] unlock.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][Those] [don't] seem to be something [we] [can] unlock.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: don't] ConjugateVerb_79(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ seem to be something ~] ParaContent(); print " seem to be something ";! [7: we] ParaContent(); (PHR_763_r11 ());! [8: ~ ~] ParaContent(); print " ";! [9: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [10: ~ unlock.~] ParaContent(); print " unlock."; .L_Say921; .L_SayX903;rtrue; ]; Array TX_S_306 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_306; [ R_TX_S_307 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] unlocked at the [if story tense is present tense]moment[otherwise]time[end if].~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] unlocked at the [if story tense is present tense]moment[otherwise]time[end if].~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ unlocked at the ~] ParaContent(); print " unlocked at the ";! [5: if story tense is present tense] if (~~((((story_tense == I106_present_tense))))) jump L_Say922;! [6: ~moment~] ParaContent(); print "moment";! [7: otherwise] jump L_SayX904; .L_Say922;! [8: ~time~] ParaContent(); print "time";! [9: end if] .L_Say923; .L_SayX904;! [10: ~.~] ParaContent(); print "."; .L_Say924; .L_SayX905;rtrue; ]; Array TX_S_307 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_307; [ R_TX_S_308 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [unlock] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [unlock] [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: unlock] ConjugateVerb_20(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say925; .L_SayX906;rtrue; ]; Array TX_S_308 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_308; [ R_TX_S_309 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [unlock] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [unlock] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: unlock] ConjugateVerb_20(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say926; .L_SayX907;rtrue; ]; Array TX_S_309 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_309; [ R_TX_S_310 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [aren't] something [we] [can] switch.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [aren't] something [we] [can] switch.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ something ~] ParaContent(); print " something ";! [7: we] ParaContent(); (PHR_763_r11 ());! [8: ~ ~] ParaContent(); print " ";! [9: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [10: ~ switch.~] ParaContent(); print " switch."; .L_Say927; .L_SayX908;rtrue; ]; Array TX_S_310 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_310; [ R_TX_S_311 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] already on.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] already on.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ already on.~] ParaContent(); print " already on."; .L_Say928; .L_SayX909;rtrue; ]; Array TX_S_311 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_311; [ R_TX_S_312 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [switch] [the noun] on.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [switch] [the noun] on.~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: switch] ConjugateVerb_60(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ on.~] ParaContent(); print " on."; .L_Say929; .L_SayX910;rtrue; ]; Array TX_S_312 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_312; [ R_TX_S_313 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [aren't] something [we] [can] switch.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [aren't] something [we] [can] switch.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ something ~] ParaContent(); print " something ";! [7: we] ParaContent(); (PHR_763_r11 ());! [8: ~ ~] ParaContent(); print " ";! [9: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [10: ~ switch.~] ParaContent(); print " switch."; .L_Say930; .L_SayX911;rtrue; ]; Array TX_S_313 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_313; [ R_TX_S_314 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] already off.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] already off.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ already off.~] ParaContent(); print " already off."; .L_Say931; .L_SayX912;rtrue; ]; Array TX_S_314 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_314; [ R_TX_S_315 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [switch] [the noun] off.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [switch] [the noun] off.~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: switch] ConjugateVerb_60(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ off.~] ParaContent(); print " off."; .L_Say932; .L_SayX913;rtrue; ]; Array TX_S_315 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_315; [ R_TX_S_316 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [aren't] something [we] [can] open.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [aren't] something [we] [can] open.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ something ~] ParaContent(); print " something ";! [7: we] ParaContent(); (PHR_763_r11 ());! [8: ~ ~] ParaContent(); print " ";! [9: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [10: ~ open.~] ParaContent(); print " open."; .L_Say933; .L_SayX914;rtrue; ]; Array TX_S_316 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_316; [ R_TX_S_317 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [seem] to be locked.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [seem] to be locked.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: seem] ConjugateVerb_55(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ to be locked.~] ParaContent(); print " to be locked."; .L_Say934; .L_SayX915;rtrue; ]; Array TX_S_317 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_317; [ R_TX_S_318 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] already open.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] already open.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ already open.~] ParaContent(); print " already open."; .L_Say935; .L_SayX916;rtrue; ]; Array TX_S_318 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_318; [ R_TX_S_319 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [open] [the noun], revealing ~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [open] [the noun], revealing ~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: open] ConjugateVerb_45(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~, revealing ~] ParaContent(); print ", revealing "; .L_Say936; .L_SayX917;rtrue; ]; Array TX_S_319 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_319; [ R_TX_S_320 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [open] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [open] [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: open] ConjugateVerb_45(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say937; .L_SayX918;rtrue; ]; Array TX_S_320 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_320; [ R_TX_S_321 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [open] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [open] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: open] ConjugateVerb_45(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say938; .L_SayX919;rtrue; ]; Array TX_S_321 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_321; [ R_TX_S_322 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [open].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [open].~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: open] ConjugateVerb_45(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~.~] ParaContent(); print "."; .L_Say939; .L_SayX920;rtrue; ]; Array TX_S_322 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_322; [ R_TX_S_323 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [aren't] something [we] [can] close.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [aren't] something [we] [can] close.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ something ~] ParaContent(); print " something ";! [7: we] ParaContent(); (PHR_763_r11 ());! [8: ~ ~] ParaContent(); print " ";! [9: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [10: ~ close.~] ParaContent(); print " close."; .L_Say940; .L_SayX921;rtrue; ]; Array TX_S_323 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_323; [ R_TX_S_324 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They're] already closed.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They're] already closed.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they're] ParaContent(); (PHR_788_r36 ());! [4: ~ already closed.~] ParaContent(); print " already closed."; .L_Say941; .L_SayX922;rtrue; ]; Array TX_S_324 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_324; [ R_TX_S_325 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [close] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [close] [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: close] ConjugateVerb_25(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say942; .L_SayX923;rtrue; ]; Array TX_S_325 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_325; [ R_TX_S_326 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [close] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [close] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: close] ConjugateVerb_25(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say943; .L_SayX924;rtrue; ]; Array TX_S_326 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_326; [ R_TX_S_327 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [close].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [close].~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: close] ConjugateVerb_25(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~.~] ParaContent(); print "."; .L_Say944; .L_SayX925;rtrue; ]; Array TX_S_327 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_327; [ R_TX_S_328 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't wear] [regarding the noun][those]!~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't wear] [regarding the noun][those]!~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't wear] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_13); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [7: those] ParaContent(); (PHR_773_r21 ());! [8: ~!~] ParaContent(); print "!"; .L_Say945; .L_SayX926;rtrue; ]; Array TX_S_328 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_328; [ R_TX_S_329 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [aren't] holding [regarding the noun][those]!~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [aren't] holding [regarding the noun][those]!~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ holding ~] ParaContent(); print " holding ";! [6: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [7: those] ParaContent(); (PHR_773_r21 ());! [8: ~!~] ParaContent(); print "!"; .L_Say946; .L_SayX927;rtrue; ]; Array TX_S_329 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_329; [ R_TX_S_330 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We]['re] already wearing [regarding the noun][those]!~"; rtrue; } #endif; ! DEBUG ! [1: ~[We]['re] already wearing [regarding the noun][those]!~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ already wearing ~] ParaContent(); print " already wearing ";! [5: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [6: those] ParaContent(); (PHR_773_r21 ());! [7: ~!~] ParaContent(); print "!"; .L_Say947; .L_SayX928;rtrue; ]; Array TX_S_330 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_330; [ R_TX_S_331 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [put] on [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [put] on [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: put] ConjugateVerb_51(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ on ~] ParaContent(); print " on ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say948; .L_SayX929;rtrue; ]; Array TX_S_331 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_331; [ R_TX_S_332 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [put] on [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [put] on [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: put] ConjugateVerb_51(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ on ~] ParaContent(); print " on ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say949; .L_SayX930;rtrue; ]; Array TX_S_332 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_332; [ R_TX_S_333 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [aren't] wearing [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [aren't] wearing [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ wearing ~] ParaContent(); print " wearing ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say950; .L_SayX931;rtrue; ]; Array TX_S_333 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_333; [ R_TX_S_334 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We]['re] carrying too many things already.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We]['re] carrying too many things already.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: 're] ConjugateVerb_74(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ carrying too many things already.~] ParaContent(); print " carrying too many things already."; .L_Say951; .L_SayX932;rtrue; ]; Array TX_S_334 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_334; [ R_TX_S_335 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [take] off [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [take] off [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: take] ConjugateVerb_61(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ off ~] ParaContent(); print " off ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say952; .L_SayX933;rtrue; ]; Array TX_S_335 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_335; [ R_TX_S_336 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [take] off [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [take] off [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: take] ConjugateVerb_61(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ off ~] ParaContent(); print " off ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say953; .L_SayX934;rtrue; ]; Array TX_S_336 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_336; [ R_TX_S_337 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [aren't] holding [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [aren't] holding [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ holding ~] ParaContent(); print " holding ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say954; .L_SayX935;rtrue; ]; Array TX_S_337 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_337; [ R_TX_S_338 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [can't give] [the noun] to [ourselves].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [can't give] [the noun] to [ourselves].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: can't give] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_33); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ to ~] ParaContent(); print " to ";! [8: ourselves] ParaContent(); (PHR_766_r14 ());! [9: ~.~] ParaContent(); print "."; .L_Say955; .L_SayX936;rtrue; ]; Array TX_S_338 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_338; [ R_TX_S_339 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The second noun] [aren't] able to receive things.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The second noun] [aren't] able to receive things.~] say__p=1;! [2: the second noun] ParaContent(); print (The) second;! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ able to receive things.~] ParaContent(); print " able to receive things."; .L_Say956; .L_SayX937;rtrue; ]; Array TX_S_339 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_339; [ R_TX_S_340 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first taking [the noun] off)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first taking [the noun] off)[command clarification break]~] say__p=1;! [2: ~(first taking ~] ParaContent(); print "(first taking ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ off)~] ParaContent(); print " off)";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say957; .L_SayX938;rtrue; ]; Array TX_S_340 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_340; [ R_TX_S_341 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The second noun] [don't] seem interested.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The second noun] [don't] seem interested.~] say__p=1;! [2: the second noun] ParaContent(); print (The) second;! [3: ~ ~] ParaContent(); print " ";! [4: don't] ConjugateVerb_79(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ seem interested.~] ParaContent(); print " seem interested."; .L_Say958; .L_SayX939;rtrue; ]; Array TX_S_341 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_341; [ R_TX_S_342 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The second noun] [are] carrying too many things already.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The second noun] [are] carrying too many things already.~] say__p=1;! [2: the second noun] ParaContent(); print (The) second;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ carrying too many things already.~] ParaContent(); print " carrying too many things already."; .L_Say959; .L_SayX940;rtrue; ]; Array TX_S_342 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_342; [ R_TX_S_343 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [give] [the noun] to [the second noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [give] [the noun] to [the second noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: give] ConjugateVerb_33(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ to ~] ParaContent(); print " to ";! [8: the second noun] ParaContent(); print (the) second;! [9: ~.~] ParaContent(); print "."; .L_Say960; .L_SayX941;rtrue; ]; Array TX_S_343 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_343; [ R_TX_S_344 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [give] [the noun] to [us].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [give] [the noun] to [us].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: give] ConjugateVerb_33(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ to ~] ParaContent(); print " to ";! [8: us] ParaContent(); (PHR_764_r12 ());! [9: ~.~] ParaContent(); print "."; .L_Say961; .L_SayX942;rtrue; ]; Array TX_S_344 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_344; [ R_TX_S_345 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [give] [the noun] to [the second noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [give] [the noun] to [the second noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: give] ConjugateVerb_33(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~ to ~] ParaContent(); print " to ";! [8: the second noun] ParaContent(); print (the) second;! [9: ~.~] ParaContent(); print "."; .L_Say962; .L_SayX943;rtrue; ]; Array TX_S_345 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_345; [ R_TX_S_346 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [aren't] holding [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [aren't] holding [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ holding ~] ParaContent(); print " holding ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say963; .L_SayX944;rtrue; ]; Array TX_S_346 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_346; [ R_TX_S_347 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The second noun] [are] unimpressed.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The second noun] [are] unimpressed.~] say__p=1;! [2: the second noun] ParaContent(); print (The) second;! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ unimpressed.~] ParaContent(); print " unimpressed."; .L_Say964; .L_SayX945;rtrue; ]; Array TX_S_347 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_347; [ R_TX_S_348 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~That [seem] unnecessary.~"; rtrue; } #endif; ! DEBUG ! [1: ~That [seem] unnecessary.~] say__p=1;! [2: ~That ~] ParaContent(); print "That ";! [3: seem] ConjugateVerb_55(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ unnecessary.~] ParaContent(); print " unnecessary."; .L_Say965; .L_SayX946;rtrue; ]; Array TX_S_348 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_348; [ R_TX_S_349 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(first taking [the noun] off)[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(first taking [the noun] off)[command clarification break]~] say__p=1;! [2: ~(first taking ~] ParaContent(); print "(first taking ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~ off)~] ParaContent(); print " off)";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say966; .L_SayX947;rtrue; ]; Array TX_S_349 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_349; [ R_TX_S_350 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Futile.~"; rtrue; } #endif; ! DEBUG ! [1: ~Futile.~] say__p=1;! [2: ~Futile.~] ParaContent(); print "Futile."; .L_Say967; .L_SayX948;rtrue; ]; Array TX_S_350 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_350; [ R_TX_S_351 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [lack] the nerve when it [if story tense is the past tense]came[otherwise]comes[end if] to the crucial moment.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [lack] the nerve when it [if story tense is the past tense]came[otherwise]comes[end if] to the crucial moment.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: lack] ConjugateVerb_38(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ the nerve when it ~] ParaContent(); print " the nerve when it ";! [6: if story tense is the past tense] if (~~((((story_tense == I107_past_tense))))) jump L_Say968;! [7: ~came~] ParaContent(); print "came";! [8: otherwise] jump L_SayX949; .L_Say968;! [9: ~comes~] ParaContent(); print "comes";! [10: end if] .L_Say969; .L_SayX949;! [11: ~ to the crucial moment.~] ParaContent(); print " to the crucial moment."; .L_Say970; .L_SayX950;rtrue; ]; Array TX_S_351 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_351; [ R_TX_S_352 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Violence [aren't] the answer to this one.~"; rtrue; } #endif; ! DEBUG ! [1: ~Violence [aren't] the answer to this one.~] say__p=1;! [2: ~Violence ~] ParaContent(); print "Violence ";! [3: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ the answer to this one.~] ParaContent(); print " the answer to this one."; .L_Say971; .L_SayX951;rtrue; ]; Array TX_S_352 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_352; [ R_TX_S_353 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [don't] get much from that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [don't] get much from that.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: don't] ConjugateVerb_79(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ get much from that.~] ParaContent(); print " get much from that."; .L_Say972; .L_SayX952;rtrue; ]; Array TX_S_353 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_353; [ R_TX_S_354 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [might not] like that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [might not] like that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: might not] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense); say__p=1; ! [5: ~ like that.~] ParaContent(); print " like that."; .L_Say973; .L_SayX953;rtrue; ]; Array TX_S_354 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_354; [ R_TX_S_355 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no reply.~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no reply.~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no reply.~] ParaContent(); print " no reply."; .L_Say974; .L_SayX954;rtrue; ]; Array TX_S_355 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_355; [ R_TX_S_356 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [talk] to [ourselves] a while.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [talk] to [ourselves] a while.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: talk] ConjugateVerb_62(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ to ~] ParaContent(); print " to ";! [6: ourselves] ParaContent(); (PHR_766_r14 ());! [7: ~ a while.~] ParaContent(); print " a while."; .L_Say975; .L_SayX955;rtrue; ]; Array TX_S_356 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_356; [ R_TX_S_357 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~This [provoke] no reaction.~"; rtrue; } #endif; ! DEBUG ! [1: ~This [provoke] no reaction.~] say__p=1;! [2: ~This ~] ParaContent(); print "This ";! [3: provoke] ConjugateVerb_48(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ no reaction.~] ParaContent(); print " no reaction."; .L_Say976; .L_SayX956;rtrue; ]; Array TX_S_357 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_357; [ R_TX_S_358 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There] [are] no reply.~"; rtrue; } #endif; ! DEBUG ! [1: ~[There] [are] no reply.~] say__p=1;! [2: there] ParaContent(); (PHR_790_r38 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ no reply.~] ParaContent(); print " no reply."; .L_Say977; .L_SayX957;rtrue; ]; Array TX_S_358 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_358; [ R_TX_S_359 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Time [pass].~"; rtrue; } #endif; ! DEBUG ! [1: ~Time [pass].~] say__p=1;! [2: ~Time ~] ParaContent(); print "Time ";! [3: pass] ConjugateVerb_46(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~.~] ParaContent(); print "."; .L_Say978; .L_SayX958;rtrue; ]; Array TX_S_359 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_359; [ R_TX_S_360 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [wait].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [wait].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: wait] ConjugateVerb_65(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~.~] ParaContent(); print "."; .L_Say979; .L_SayX959;rtrue; ]; Array TX_S_360 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_360; [ R_TX_S_361 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [achieve] nothing by this.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [achieve] nothing by this.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: achieve] ConjugateVerb_21(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing by this.~] ParaContent(); print " nothing by this."; .L_Say980; .L_SayX960;rtrue; ]; Array TX_S_361 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_361; [ R_TX_S_362 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [touch] [themselves].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [touch] [themselves].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: touch] ConjugateVerb_18(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: themselves] ParaContent(); (PHR_785_r33 ());! [7: ~.~] ParaContent(); print "."; .L_Say981; .L_SayX961;rtrue; ]; Array TX_S_362 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_362; [ R_TX_S_363 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [might not like] that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [might not like] that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: might not like] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense, ConjugateVerb_40); say__p=1; ! [5: ~ that.~] ParaContent(); print " that."; .L_Say982; .L_SayX962;rtrue; ]; Array TX_S_363 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_363; [ R_TX_S_364 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [touch] [us].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [touch] [us].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: touch] ConjugateVerb_18(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: us] ParaContent(); (PHR_764_r12 ());! [7: ~.~] ParaContent(); print "."; .L_Say983; .L_SayX963;rtrue; ]; Array TX_S_364 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_364; [ R_TX_S_365 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [touch] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [touch] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: touch] ConjugateVerb_18(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say984; .L_SayX964;rtrue; ]; Array TX_S_365 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_365; [ R_TX_S_366 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [feel] nothing unexpected.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [feel] nothing unexpected.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: feel] ConjugateVerb_30(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing unexpected.~] ParaContent(); print " nothing unexpected."; .L_Say985; .L_SayX965;rtrue; ]; Array TX_S_366 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_366; [ R_TX_S_367 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [touch] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [touch] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: touch] ConjugateVerb_18(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say986; .L_SayX966;rtrue; ]; Array TX_S_367 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_367; [ R_TX_S_368 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~But [we] [aren't] holding [regarding the noun][those].~"; rtrue; } #endif; ! DEBUG ! [1: ~But [we] [aren't] holding [regarding the noun][those].~] say__p=1;! [2: ~But ~] ParaContent(); print "But ";! [3: we] ParaContent(); (PHR_763_r11 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ holding ~] ParaContent(); print " holding ";! [7: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [8: those] ParaContent(); (PHR_773_r21 ());! [9: ~.~] ParaContent(); print "."; .L_Say987; .L_SayX967;rtrue; ]; Array TX_S_368 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_368; [ R_TX_S_369 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [wave] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [wave] [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: wave] ConjugateVerb_66(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say988; .L_SayX968;rtrue; ]; Array TX_S_369 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_369; [ R_TX_S_370 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [wave] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [wave] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: wave] ConjugateVerb_66(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say989; .L_SayX969;rtrue; ]; Array TX_S_370 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_370; [ R_TX_S_371 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [are] fixed in place.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [are] fixed in place.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ fixed in place.~] ParaContent(); print " fixed in place."; .L_Say990; .L_SayX970;rtrue; ]; Array TX_S_371 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_371; [ R_TX_S_372 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [are] unable to.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [are] unable to.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ unable to.~] ParaContent(); print " unable to."; .L_Say991; .L_SayX971;rtrue; ]; Array TX_S_372 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_372; [ R_TX_S_373 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [might not like] that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [might not like] that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: might not like] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense, ConjugateVerb_40); say__p=1; ! [5: ~ that.~] ParaContent(); print " that."; .L_Say992; .L_SayX972;rtrue; ]; Array TX_S_373 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_373; [ R_TX_S_374 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Nothing obvious [happen].~"; rtrue; } #endif; ! DEBUG ! [1: ~Nothing obvious [happen].~] say__p=1;! [2: ~Nothing obvious ~] ParaContent(); print "Nothing obvious ";! [3: happen] ConjugateVerb_35(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~.~] ParaContent(); print "."; .L_Say993; .L_SayX973;rtrue; ]; Array TX_S_374 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_374; [ R_TX_S_375 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [pull] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [pull] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: pull] ConjugateVerb_49(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say994; .L_SayX974;rtrue; ]; Array TX_S_375 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_375; [ R_TX_S_376 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [are] fixed in place.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [are] fixed in place.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ fixed in place.~] ParaContent(); print " fixed in place."; .L_Say995; .L_SayX975;rtrue; ]; Array TX_S_376 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_376; [ R_TX_S_377 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [are] unable to.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [are] unable to.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ unable to.~] ParaContent(); print " unable to."; .L_Say996; .L_SayX976;rtrue; ]; Array TX_S_377 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_377; [ R_TX_S_378 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [might not like] that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [might not like] that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: might not like] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense, ConjugateVerb_40); say__p=1; ! [5: ~ that.~] ParaContent(); print " that."; .L_Say997; .L_SayX977;rtrue; ]; Array TX_S_378 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_378; [ R_TX_S_379 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Nothing obvious [happen].~"; rtrue; } #endif; ! DEBUG ! [1: ~Nothing obvious [happen].~] say__p=1;! [2: ~Nothing obvious ~] ParaContent(); print "Nothing obvious ";! [3: happen] ConjugateVerb_35(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~.~] ParaContent(); print "."; .L_Say998; .L_SayX978;rtrue; ]; Array TX_S_379 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_379; [ R_TX_S_380 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [push] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [push] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: push] ConjugateVerb_50(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say999; .L_SayX979;rtrue; ]; Array TX_S_380 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_380; [ R_TX_S_381 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [are] fixed in place.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [are] fixed in place.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ fixed in place.~] ParaContent(); print " fixed in place."; .L_Say1000; .L_SayX980;rtrue; ]; Array TX_S_381 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_381; [ R_TX_S_382 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [are] unable to.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [are] unable to.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ unable to.~] ParaContent(); print " unable to."; .L_Say1001; .L_SayX981;rtrue; ]; Array TX_S_382 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_382; [ R_TX_S_383 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [might not like] that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [might not like] that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: might not like] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense, ConjugateVerb_40); say__p=1; ! [5: ~ that.~] ParaContent(); print " that."; .L_Say1002; .L_SayX982;rtrue; ]; Array TX_S_383 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_383; [ R_TX_S_384 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Nothing obvious [happen].~"; rtrue; } #endif; ! DEBUG ! [1: ~Nothing obvious [happen].~] say__p=1;! [2: ~Nothing obvious ~] ParaContent(); print "Nothing obvious ";! [3: happen] ConjugateVerb_35(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~.~] ParaContent(); print "."; .L_Say1003; .L_SayX983;rtrue; ]; Array TX_S_384 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_384; [ R_TX_S_385 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [turn] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [turn] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: turn] ConjugateVerb_64(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say1004; .L_SayX984;rtrue; ]; Array TX_S_385 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_385; [ R_TX_S_386 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [cannot] be pushed from place to place.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [cannot] be pushed from place to place.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: cannot] ConjugateVerb_15(CV_NEG, PNToVP(), story_tense); say__p=1; ! [5: ~ be pushed from place to place.~] ParaContent(); print " be pushed from place to place."; .L_Say1005; .L_SayX985;rtrue; ]; Array TX_S_386 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_386; [ R_TX_S_387 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the noun][They] [aren't] a direction.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the noun][They] [aren't] a direction.~] say__p=1;! [2: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [3: they] ParaContent(); (PHR_778_r26 ());! [4: ~ ~] ParaContent(); print " ";! [5: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ a direction.~] ParaContent(); print " a direction."; .L_Say1006; .L_SayX986;rtrue; ]; Array TX_S_387 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_387; [ R_TX_S_388 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [cannot] be pushed up or down.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [cannot] be pushed up or down.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: cannot] ConjugateVerb_15(CV_NEG, PNToVP(), story_tense); say__p=1; ! [5: ~ be pushed up or down.~] ParaContent(); print " be pushed up or down."; .L_Say1007; .L_SayX987;rtrue; ]; Array TX_S_388 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_388; [ R_TX_S_389 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [cannot] be pushed from here.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [cannot] be pushed from here.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: cannot] ConjugateVerb_15(CV_NEG, PNToVP(), story_tense); say__p=1; ! [5: ~ be pushed from here.~] ParaContent(); print " be pushed from here."; .L_Say1008; .L_SayX988;rtrue; ]; Array TX_S_389 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_389; [ R_TX_S_390 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [cannot] be pushed from place to place.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [cannot] be pushed from place to place.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: cannot] ConjugateVerb_15(CV_NEG, PNToVP(), story_tense); say__p=1; ! [5: ~ be pushed from place to place.~] ParaContent(); print " be pushed from place to place."; .L_Say1009; .L_SayX989;rtrue; ]; Array TX_S_390 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_390; [ R_TX_S_391 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [might not like] that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [might not like] that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: might not like] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense, ConjugateVerb_40); say__p=1; ! [5: ~ that.~] ParaContent(); print " that."; .L_Say1010; .L_SayX990;rtrue; ]; Array TX_S_391 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_391; [ R_TX_S_392 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [achieve] nothing by this.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [achieve] nothing by this.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: achieve] ConjugateVerb_21(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing by this.~] ParaContent(); print " nothing by this."; .L_Say1011; .L_SayX991;rtrue; ]; Array TX_S_392 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_392; [ R_TX_S_393 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [squeeze] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [squeeze] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: squeeze] ConjugateVerb_59(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say1012; .L_SayX992;rtrue; ]; Array TX_S_393 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_393; [ R_TX_S_394 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~That was a rhetorical question.~"; rtrue; } #endif; ! DEBUG ! [1: ~That was a rhetorical question.~] say__p=1;! [2: ~That was a rhetorical question.~] ParaContent(); print "That was a rhetorical question."; .L_Say1013; .L_SayX993;rtrue; ]; Array TX_S_394 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_394; [ R_TX_S_395 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~That was a rhetorical question.~"; rtrue; } #endif; ! DEBUG ! [1: ~That was a rhetorical question.~] say__p=1;! [2: ~That was a rhetorical question.~] ParaContent(); print "That was a rhetorical question."; .L_Say1014; .L_SayX994;rtrue; ]; Array TX_S_395 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_395; [ R_TX_S_396 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~This dangerous act [would achieve] little.~"; rtrue; } #endif; ! DEBUG ! [1: ~This dangerous act [would achieve] little.~] say__p=1;! [2: ~This dangerous act ~] ParaContent(); print "This dangerous act ";! [3: would achieve] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_21); say__p=1; ! [4: ~ little.~] ParaContent(); print " little."; .L_Say1015; .L_SayX995;rtrue; ]; Array TX_S_396 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_396; [ R_TX_S_397 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~The dreadful truth [are], this [are not] a dream.~"; rtrue; } #endif; ! DEBUG ! [1: ~The dreadful truth [are], this [are not] a dream.~] say__p=1;! [2: ~The dreadful truth ~] ParaContent(); print "The dreadful truth ";! [3: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~, this ~] ParaContent(); print ", this ";! [5: are not] ConjugateVerb_0(CV_NEG, PNToVP(), story_tense); say__p=1; ! [6: ~ a dream.~] ParaContent(); print " a dream."; .L_Say1016; .L_SayX996;rtrue; ]; Array TX_S_397 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_397; [ R_TX_S_398 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~What a good idea.~"; rtrue; } #endif; ! DEBUG ! [1: ~What a good idea.~] say__p=1;! [2: ~What a good idea.~] ParaContent(); print "What a good idea."; .L_Say1017; .L_SayX997;rtrue; ]; Array TX_S_398 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_398; [ R_TX_S_399 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [smell] nothing unexpected.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [smell] nothing unexpected.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: smell] ConjugateVerb_57(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing unexpected.~] ParaContent(); print " nothing unexpected."; .L_Say1018; .L_SayX998;rtrue; ]; Array TX_S_399 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_399; [ R_TX_S_400 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [sniff].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [sniff].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: sniff] ConjugateVerb_58(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~.~] ParaContent(); print "."; .L_Say1019; .L_SayX999;rtrue; ]; Array TX_S_400 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_400; [ R_TX_S_401 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [hear] nothing unexpected.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [hear] nothing unexpected.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: hear] ConjugateVerb_36(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing unexpected.~] ParaContent(); print " nothing unexpected."; .L_Say1020; .L_SayX1000;rtrue; ]; Array TX_S_401 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_401; [ R_TX_S_402 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [listen].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [listen].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: listen] ConjugateVerb_41(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~.~] ParaContent(); print "."; .L_Say1021; .L_SayX1001;rtrue; ]; Array TX_S_402 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_402; [ R_TX_S_403 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [taste] nothing unexpected.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [taste] nothing unexpected.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: taste] ConjugateVerb_63(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ nothing unexpected.~] ParaContent(); print " nothing unexpected."; .L_Say1022; .L_SayX1002;rtrue; ]; Array TX_S_403 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_403; [ R_TX_S_404 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [taste] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [taste] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: taste] ConjugateVerb_63(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say1023; .L_SayX1003;rtrue; ]; Array TX_S_404 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_404; [ R_TX_S_405 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Cutting [regarding the noun][them] up [would achieve] little.~"; rtrue; } #endif; ! DEBUG ! [1: ~Cutting [regarding the noun][them] up [would achieve] little.~] say__p=1;! [2: ~Cutting ~] ParaContent(); print "Cutting ";! [3: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [4: them] ParaContent(); (PHR_781_r29 ());! [5: ~ up ~] ParaContent(); print " up ";! [6: would achieve] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_21); say__p=1; ! [7: ~ little.~] ParaContent(); print " little."; .L_Say1024; .L_SayX1004;rtrue; ]; Array TX_S_405 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_405; [ R_TX_S_406 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [jump] on the spot.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [jump] on the spot.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: jump] ConjugateVerb_37(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ on the spot.~] ParaContent(); print " on the spot."; .L_Say1025; .L_SayX1005;rtrue; ]; Array TX_S_406 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_406; [ R_TX_S_407 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [jump] on the spot.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [jump] on the spot.~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: jump] ConjugateVerb_37(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ on the spot.~] ParaContent(); print " on the spot."; .L_Say1026; .L_SayX1006;rtrue; ]; Array TX_S_407 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_407; [ R_TX_S_408 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [would achieve] nothing by this.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [would achieve] nothing by this.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: would achieve] ConjugateVerb_73(CV_POS, PNToVP(), story_tense, ConjugateVerb_21); say__p=1; ! [5: ~ nothing by this.~] ParaContent(); print " nothing by this."; .L_Say1027; .L_SayX1007;rtrue; ]; Array TX_S_408 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_408; [ R_TX_S_409 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There's] nothing suitable to drink here.~"; rtrue; } #endif; ! DEBUG ! [1: ~[There's] nothing suitable to drink here.~] say__p=1;! [2: there's] ParaContent(); (PHR_794_r42 ());! [3: ~ nothing suitable to drink here.~] ParaContent(); print " nothing suitable to drink here."; .L_Say1028; .L_SayX1008;rtrue; ]; Array TX_S_409 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_409; [ R_TX_S_410 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Oh, don't [if American dialect option is active]apologize[otherwise]apologise[end if].~"; rtrue; } #endif; ! DEBUG ! [1: ~Oh, don't [if American dialect option is active]apologize[otherwise]apologise[end if].~] say__p=1;! [2: ~Oh, don't ~] ParaContent(); print "Oh, don't ";! [3: if american dialect option is active] if (~~(((((Adj_25_t1_v16(5))))))) jump L_Say1029;! [4: ~apologize~] ParaContent(); print "apologize";! [5: otherwise] jump L_SayX1009; .L_Say1029;! [6: ~apologise~] ParaContent(); print "apologise";! [7: end if] .L_Say1030; .L_SayX1009;! [8: ~.~] ParaContent(); print "."; .L_Say1031; .L_SayX1010;rtrue; ]; Array TX_S_410 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_410; [ R_TX_S_411 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[There's] nothing sensible to swing here.~"; rtrue; } #endif; ! DEBUG ! [1: ~[There's] nothing sensible to swing here.~] say__p=1;! [2: there's] ParaContent(); (PHR_794_r42 ());! [3: ~ nothing sensible to swing here.~] ParaContent(); print " nothing sensible to swing here."; .L_Say1032; .L_SayX1011;rtrue; ]; Array TX_S_411 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_411; [ R_TX_S_412 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The noun] [might not like] that.~"; rtrue; } #endif; ! DEBUG ! [1: ~[The noun] [might not like] that.~] say__p=1;! [2: the noun] ParaContent(); print (The) noun;! [3: ~ ~] ParaContent(); print " ";! [4: might not like] ConjugateVerb_70(CV_NEG, PNToVP(), story_tense, ConjugateVerb_40); say__p=1; ! [5: ~ that.~] ParaContent(); print " that."; .L_Say1033; .L_SayX1012;rtrue; ]; Array TX_S_412 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_412; [ R_TX_S_413 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [rub] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [rub] [the noun].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: rub] ConjugateVerb_52(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say1034; .L_SayX1013;rtrue; ]; Array TX_S_413 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_413; [ R_TX_S_414 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [rub] [the noun].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [rub] [the noun].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: rub] ConjugateVerb_52(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ ~] ParaContent(); print " ";! [6: the noun] ParaContent(); print (the) noun;! [7: ~.~] ParaContent(); print "."; .L_Say1035; .L_SayX1014;rtrue; ]; Array TX_S_414 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_414; [ R_TX_S_415 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~No, [we] [can't set] [regarding the noun][those] to anything.~"; rtrue; } #endif; ! DEBUG ! [1: ~No, [we] [can't set] [regarding the noun][those] to anything.~] say__p=1;! [2: ~No, ~] ParaContent(); print "No, ";! [3: we] ParaContent(); (PHR_763_r11 ());! [4: ~ ~] ParaContent(); print " ";! [5: can't set] ConjugateVerb_77(CV_POS, PNToVP(), story_tense, ConjugateVerb_56); say__p=1; ! [6: ~ ~] ParaContent(); print " ";! [7: regarding the noun] ParaContent(); RegardingSingleObject(noun);! [8: those] ParaContent(); (PHR_773_r21 ());! [9: ~ to anything.~] ParaContent(); print " to anything."; .L_Say1036; .L_SayX1015;rtrue; ]; Array TX_S_415 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_415; [ R_TX_S_416 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [wave].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [wave].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: wave] ConjugateVerb_66(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~.~] ParaContent(); print "."; .L_Say1037; .L_SayX1016;rtrue; ]; Array TX_S_416 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_416; [ R_TX_S_417 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[The actor] [wave].~"; rtrue; } #endif; ! DEBUG ! [1: ~[The actor] [wave].~] say__p=1;! [2: the actor] ParaContent(); print (The) actor;! [3: ~ ~] ParaContent(); print " ";! [4: wave] ConjugateVerb_66(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~.~] ParaContent(); print "."; .L_Say1038; .L_SayX1017;rtrue; ]; Array TX_S_417 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_417; [ R_TX_S_418 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Nothing [are] on sale.~"; rtrue; } #endif; ! DEBUG ! [1: ~Nothing [are] on sale.~] say__p=1;! [2: ~Nothing ~] ParaContent(); print "Nothing ";! [3: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ on sale.~] ParaContent(); print " on sale."; .L_Say1039; .L_SayX1018;rtrue; ]; Array TX_S_418 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_418; [ R_TX_S_419 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Little [are] to be achieved by that.~"; rtrue; } #endif; ! DEBUG ! [1: ~Little [are] to be achieved by that.~] say__p=1;! [2: ~Little ~] ParaContent(); print "Little ";! [3: are] ConjugateVerb_0(CV_POS, PNToVP(), story_tense); say__p=1; ! [4: ~ to be achieved by that.~] ParaContent(); print " to be achieved by that."; .L_Say1040; .L_SayX1019;rtrue; ]; Array TX_S_419 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_419; [ R_TX_S_420 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [aren't] feeling especially drowsy.~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [aren't] feeling especially drowsy.~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: aren't] ConjugateVerb_76(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ feeling especially drowsy.~] ParaContent(); print " feeling especially drowsy."; .L_Say1041; .L_SayX1020;rtrue; ]; Array TX_S_420 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_420; [ R_TX_S_421 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[paragraph break]Please press SPACE to continue.~"; rtrue; } #endif; ! DEBUG ! [1: ~[paragraph break]Please press SPACE to continue.~] say__p=1;! [2: paragraph break] ParaContent(); DivideParagraphPoint(); new_line;! [3: ~Please press SPACE to continue.~] ParaContent(); print "Please press SPACE to continue."; .L_Say1042; .L_SayX1021;rtrue; ]; Array TX_S_421 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_421; [ R_TX_S_422 tmp_0 ! Let/loop value, e.g., 'locked-thing': thing ; tmp_0=LocalParking-->0; #ifdef DEBUG; if (suppress_text_substitution) { print "~[We] [lack] a key that fits [the locked-thing].~"; rtrue; } #endif; ! DEBUG ! [1: ~[We] [lack] a key that fits [the locked-thing].~] say__p=1;! [2: we] ParaContent(); (PHR_768_r16 ());! [3: ~ ~] ParaContent(); print " ";! [4: lack] ConjugateVerb_38(CV_POS, PNToVP(), story_tense); say__p=1; ! [5: ~ a key that fits ~] ParaContent(); print " a key that fits ";! [6: the locked-thing] ParaContent(); print (the) tmp_0;! [7: ~.~] ParaContent(); print "."; .L_Say1043; .L_SayX1022;rtrue; ]; Array TX_S_422 --> CONSTANT_PERISHABLE_TEXT_STORAGE R_TX_S_422; [ R_TX_S_423 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(with [the key unlocked with])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(with [the key unlocked with])[command clarification break]~] say__p=1;! [2: ~(with ~] ParaContent(); print "(with ";! [3: the key unlocked with] ParaContent(); print (the) (MStack-->MstVO(20077,0));! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say1044; .L_SayX1023;rtrue; ]; Array TX_S_423 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_423; [ R_TX_S_424 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~(with [the key locked with])[command clarification break]~"; rtrue; } #endif; ! DEBUG ! [1: ~(with [the key locked with])[command clarification break]~] say__p=1;! [2: ~(with ~] ParaContent(); print "(with ";! [3: the key locked with] ParaContent(); print (the) (MStack-->MstVO(20078,0));! [4: ~)~] ParaContent(); print ")";! [5: command clarification break] ParaContent(); CommandClarificationBreak(); .L_Say1045; .L_SayX1024;rtrue; ]; Array TX_S_424 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_424; [ R_TX_S_425 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the second noun][Those] [don't] seem to fit the lock.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the second noun][Those] [don't] seem to fit the lock.~] say__p=1;! [2: regarding the second noun] ParaContent(); RegardingSingleObject(second);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: don't] ConjugateVerb_79(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ seem to fit the lock.~] ParaContent(); print " seem to fit the lock."; .L_Say1046; .L_SayX1025;rtrue; ]; Array TX_S_425 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_425; [ R_TX_S_426 ; #ifdef DEBUG; if (suppress_text_substitution) { print "~[regarding the second noun][Those] [don't] seem to fit the lock.~"; rtrue; } #endif; ! DEBUG ! [1: ~[regarding the second noun][Those] [don't] seem to fit the lock.~] say__p=1;! [2: regarding the second noun] ParaContent(); RegardingSingleObject(second);! [3: those] ParaContent(); (PHR_774_r22 ());! [4: ~ ~] ParaContent(); print " ";! [5: don't] ConjugateVerb_79(CV_POS, PNToVP(), story_tense); say__p=1; ! [6: ~ seem to fit the lock.~] ParaContent(); print " seem to fit the lock."; .L_Say1047; .L_SayX1026;rtrue; ]; Array TX_S_426 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_426; [ R_TX_S_427 tmp_0 ! Let/loop value, e.g., 'containing keychain': keychain ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Without holding [the noun], [we] [can] do nothing.~"; rtrue; } #endif; ! DEBUG ! [1: ~Without holding [the noun], [we] [can] do nothing.~] say__p=1;! [2: ~Without holding ~] ParaContent(); print "Without holding ";! [3: the noun] ParaContent(); print (the) noun;! [4: ~, ~] ParaContent(); print ", ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " ";! [7: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [8: ~ do nothing.~] ParaContent(); print " do nothing."; .L_Say1048; .L_SayX1027;rtrue; ]; Array TX_S_427 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_427; [ R_TX_S_428 tmp_0 ! Let/loop value: object tmp_1 ! Let/loop value, e.g., 'containing keychain': keychain ; #ifdef DEBUG; if (suppress_text_substitution) { print "~Without holding [the second noun], [we] [can] do nothing.~"; rtrue; } #endif; ! DEBUG ! [1: ~Without holding [the second noun], [we] [can] do nothing.~] say__p=1;! [2: ~Without holding ~] ParaContent(); print "Without holding ";! [3: the second noun] ParaContent(); print (the) second;! [4: ~, ~] ParaContent(); print ", ";! [5: we] ParaContent(); (PHR_763_r11 ());! [6: ~ ~] ParaContent(); print " ";! [7: can] ConjugateVerb_15(CV_POS, PNToVP(), story_tense); say__p=1; ! [8: ~ do nothing.~] ParaContent(); print " do nothing."; .L_Say1049; .L_SayX1028;rtrue; ]; Array TX_S_428 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_428; Array Rel_Record_0 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "equality relation" RELS_TEST 0 KD3_relation_of_values Rel_Handler_0 "is"; [ Rel_Handler_0 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == Y) rtrue; rfalse; default: RunTimeProblem(RTP_RELMINIMAL, task, 0, Rel_Record_0); } rfalse; ]; Array Rel_Record_1 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "provision relation" RELS_TEST 0 KD4_relation_of_objects Rel_Handler_1 "provides"; [ Rel_Handler_1 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (false) rtrue; rfalse; default: RunTimeProblem(RTP_RELMINIMAL, task, 0, Rel_Record_1); } rfalse; ]; Array Rel_Record_3 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "universal relation" RELS_TEST 0 KD4_relation_of_objects Rel_Handler_3 "relates"; [ Rel_Handler_3 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (((RlnGetF(X, RR_HANDLER))(X, RELS_TEST, Y))) rtrue; rfalse; default: RunTimeProblem(RTP_RELMINIMAL, task, 0, Rel_Record_3); } rfalse; ]; Array Rel_Record_5 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "meaning relation" RELS_TEST 0 KD4_relation_of_objects Rel_Handler_5 "means"; [ Rel_Handler_5 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if ((BlkValueCompare(X(CV_MEANING), Y)==0)) rtrue; rfalse; default: RunTimeProblem(RTP_RELMINIMAL, task, 0, Rel_Record_5); } rfalse; ]; Array Rel_Record_15 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "containment relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_LOOKUP_ANY 0 KD4_relation_of_objects Rel_Handler_15 "contains"; [ Rel_Handler_15 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == ContainerOf(Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { objectloop (Z1 ofclass Object) { if (Rel_Handler_15(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(OBJECT_TY); } else { objectloop (Z1 ofclass Object) { if (Rel_Handler_15(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(OBJECT_TY); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { objectloop (Z1 ofclass Object) { if (Rel_Handler_15(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { objectloop (Z1 ofclass Object) { if (Rel_Handler_15(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { objectloop (Z1 ofclass Object) { objectloop (Z3 ofclass Object) { if (Rel_Handler_15(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { objectloop (Z1 ofclass Object) { objectloop (Z3 ofclass Object) { if (Rel_Handler_15(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: MoveObject(Y,X); rtrue; RELS_ASSERT_FALSE: rfalse; rtrue; } rfalse; ]; Array Rel_Record_17 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "support relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_LOOKUP_ANY 0 KD5_relation_of_supporters_to_ Rel_Handler_17 "supports"; [ Rel_Handler_17 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == SupporterOf(Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK6_First: Z1: Z1=Z1.IK6_Link) { if (Rel_Handler_17(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_17(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK6_First: Z1: Z1=Z1.IK6_Link) { if (Rel_Handler_17(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_17(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK6_First: Z1: Z1=Z1.IK6_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_17(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK6_First: Z1: Z1=Z1.IK6_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_17(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: MoveObject(Y,X); rtrue; RELS_ASSERT_FALSE: rfalse; rtrue; } rfalse; ]; Array Rel_Record_19 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "incorporation relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_LOOKUP_ANY 0 KD6_relation_of_things Rel_Handler_19 "incorporates"; [ Rel_Handler_19 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == (Y.component_parent)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_19(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_19(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_19(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_19(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_19(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_19(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: MakePart(Y,X); rtrue; RELS_ASSERT_FALSE: rfalse; rtrue; } rfalse; ]; Array Rel_Record_21 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "carrying relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_LOOKUP_ANY 0 KD7_relation_of_people_to_thin Rel_Handler_21 "carries"; [ Rel_Handler_21 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == CarrierOf(Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_21(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_21(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_21(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_21(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_21(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_21(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: MoveObject(Y,X); rtrue; RELS_ASSERT_FALSE: rfalse; rtrue; } rfalse; ]; Array Rel_Record_23 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "holding relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_LOOKUP_ANY 0 KD7_relation_of_people_to_thin Rel_Handler_23 "holds"; [ Rel_Handler_23 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == HolderOf(Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_23(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_23(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_23(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_23(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_23(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_23(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: MoveObject(Y,X); rtrue; RELS_ASSERT_FALSE: rfalse; rtrue; } rfalse; ]; Array Rel_Record_25 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "wearing relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_LOOKUP_ANY 0 KD7_relation_of_people_to_thin Rel_Handler_25 "wears"; [ Rel_Handler_25 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == WearerOf(Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_25(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_25(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { if (Rel_Handler_25(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_25(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_25(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK8_First: Z1: Z1=Z1.IK8_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_25(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: WearObject(Y,X); rtrue; RELS_ASSERT_FALSE: rfalse; rtrue; } rfalse; ]; Array Rel_Record_27 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "possession relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_LOOKUP_ANY 0 KD4_relation_of_objects Rel_Handler_27 "has"; [ Rel_Handler_27 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == OwnerOf(Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; rfalse; } else { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; rfalse; } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { } else { } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { } else if (Y == RLIST_ALL_Y) { } return X; RELS_ASSERT_TRUE: MoveObject(Y,X); rtrue; RELS_ASSERT_FALSE: rfalse; rtrue; } rfalse; ]; Array Rel_Record_31 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "visibility relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST 0 KD6_relation_of_things Rel_Handler_31 "can-see"; [ Rel_Handler_31 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (TestVisibility(X,Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_31(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_31(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_31(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_31(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_31(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_31(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; } rfalse; ]; Array Rel_Record_33 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "touchability relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST 0 KD6_relation_of_things Rel_Handler_33 "can-touch"; [ Rel_Handler_33 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (TestTouchability(X,Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_33(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_33(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_33(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_33(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_33(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_33(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; } rfalse; ]; Array Rel_Record_35 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "concealment relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST 0 KD6_relation_of_things Rel_Handler_35 "conceals"; [ Rel_Handler_35 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (TestConcealment(X,Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_35(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_35(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_35(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_35(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_35(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_35(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; } rfalse; ]; Array Rel_Record_37 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "enclosure relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST 0 KD4_relation_of_objects Rel_Handler_37 "encloses"; [ Rel_Handler_37 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (IndirectlyContains(X,Y)) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { objectloop (Z1 ofclass Object) { if (Rel_Handler_37(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(OBJECT_TY); } else { objectloop (Z1 ofclass Object) { if (Rel_Handler_37(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(OBJECT_TY); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { objectloop (Z1 ofclass Object) { if (Rel_Handler_37(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { objectloop (Z1 ofclass Object) { if (Rel_Handler_37(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { objectloop (Z1 ofclass Object) { objectloop (Z3 ofclass Object) { if (Rel_Handler_37(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { objectloop (Z1 ofclass Object) { objectloop (Z3 ofclass Object) { if (Rel_Handler_37(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; } rfalse; ]; Array Rel_Record_67 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "leading-through relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_X_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND door_to KD8_relation_of_rooms_to_doors Rel_Handler_67 "Leading-through relates one room ( called the other side ) to various doors"; [ Rel_Handler_67 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == (RGuard_f0_0(Y))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_67(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK4_First: Z1: Z1=Z1.IK4_Link) { if (Rel_Handler_67(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { if (Rel_Handler_67(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK4_First: Z1: Z1=Z1.IK4_Link) { if (Rel_Handler_67(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { for (Z3=IK4_First: Z3: Z3=Z3.IK4_Link) { if (Rel_Handler_67(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK1_First: Z1: Z1=Z1.IK1_Link) { for (Z3=IK4_First: Z3: Z3=Z3.IK4_Link) { if (Rel_Handler_67(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: (RGuard_MT_0(X,Y)); rtrue; RELS_ASSERT_FALSE: (RGuard_MF_0(X,Y)); rtrue; RELS_SHOW: Relation_RShowOtoO(rr, false); rtrue; RELS_EMPTY: return Relation_EmptyOtoO(rr, false, (X == 1)); RELS_ROUTE_FIND: return OtoVRelRouteTo(RlnGetF(rr, RR_STORAGE), X, Y); RELS_ROUTE_FIND_COUNT: return RelFollowVector(OtoVRelRouteTo(RlnGetF(rr, RR_STORAGE), X, Y), X, Y); } rfalse; ]; Array Rel_Record_69 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "lock-fitting relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_X_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND with_key KD6_relation_of_things Rel_Handler_69 "Lock-fitting relates one thing ( called the matching key ) to various things"; [ Rel_Handler_69 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == (RGuard_f0_1(Y))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_69(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_69(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_69(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: (RGuard_MT_1(X,Y)); rtrue; RELS_ASSERT_FALSE: (RGuard_MF_1(X,Y)); rtrue; RELS_SHOW: Relation_RShowOtoO(rr, false); rtrue; RELS_EMPTY: return Relation_EmptyOtoO(rr, false, (X == 1)); RELS_ROUTE_FIND: return OtoVRelRouteTo(RlnGetF(rr, RR_STORAGE), X, Y); RELS_ROUTE_FIND_COUNT: return RelFollowVector(OtoVRelRouteTo(RlnGetF(rr, RR_STORAGE), X, Y), X, Y); } rfalse; ]; Array Rel_Record_71 --> 0 (101515264) RELATION_TY MAX_POSITIVE_NUMBER NULL NULL "unbolting relation" RELS_TEST+RELS_LOOKUP_ANY+RELS_LOOKUP_ALL_X+RELS_LOOKUP_ALL_Y+RELS_LIST+RELS_X_UNIQUE+RELS_ASSERT_TRUE+RELS_ASSERT_FALSE+RELS_SHOW+RELS_ROUTE_FIND p59_unbolting_relation_stora KD9_relation_of_passkeys_to_th Rel_Handler_71 "Unbolting relates one passkey to various things"; [ Rel_Handler_71 rr ! Implied call parameter task ! Implied call parameter X ! Implied call parameter Y ! Implied call parameter Z1 ! loop counter Z2 ! loop counter Z3 ! loop counter Z4 ! loop counter ; switch (task) { RELS_TEST: if (X == (RGuard_f0_2(Y))) rtrue; rfalse; RELS_LOOKUP_ANY: if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { for (Z1=nothing: false: ) { if (Rel_Handler_71(rr, RELS_TEST, Z1, X)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_71(rr, RELS_TEST, X, Z1)) { if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return Z1; } } if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rfalse; return DefaultValueOfKOV(10); } RELS_LOOKUP_ALL_X, RELS_LOOKUP_ALL_Y: LIST_OF_TY_SetLength(Y, 0); if (task == RELS_LOOKUP_ALL_X) { for (Z1=nothing: false: ) { if (Rel_Handler_71(rr, RELS_TEST, Z1, X)) { LIST_OF_TY_InsertItem(Y, Z1); } } } else { for (Z1=IK2_First: Z1: Z1=Z1.IK2_Link) { if (Rel_Handler_71(rr, RELS_TEST, X, Z1)) { LIST_OF_TY_InsertItem(Y, Z1); } } } return Y; RELS_LIST: LIST_OF_TY_SetLength(X, 0); if (Y == RLIST_ALL_X) { for (Z1=nothing: false: ) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_71(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z1, false, 0, true); } } } } else if (Y == RLIST_ALL_Y) { for (Z1=nothing: false: ) { for (Z3=IK2_First: Z3: Z3=Z3.IK2_Link) { if (Rel_Handler_71(rr, RELS_TEST, Z1, Z3)) { LIST_OF_TY_InsertItem(X, Z3, false, 0, true); } } } } return X; RELS_ASSERT_TRUE: (RGuard_MT_2(X,Y)); rtrue; RELS_ASSERT_FALSE: (RGuard_MF_2(X,Y)); rtrue; RELS_SHOW: Relation_RShowOtoO(rr, false); rtrue; RELS_EMPTY: return Relation_EmptyOtoO(rr, false, (X == 1)); RELS_ROUTE_FIND: return OtoVRelRouteTo(RlnGetF(rr, RR_STORAGE), X, Y); RELS_ROUTE_FIND_COUNT: return RelFollowVector(OtoVRelRouteTo(RlnGetF(rr, RR_STORAGE), X, Y), X, Y); } rfalse; ]; [ CreateDynamicRelations i ! loop counter rel ! new relation ; ]; [ RProperty obj cl pr; if (obj ofclass cl) return obj.pr; return nothing; ]; ! Routines guarding leading-through(L, R) [ RGuard_f0_0 X ! which is related to at most one object ; if (X ofclass K4_door) return (X.door_to); return nothing; ]; [ RGuard_f1_0 X ! which is related to at most one object ; return nothing; ]; [ RGuard_T_0 L ! left member of pair R ! right member of pair ; rfalse; ]; [ RGuard_MT_0 L ! left member of pair R ! right member of pair ; if ((L ofclass K1_room) && (R ofclass K4_door)) { R.door_to = L; rtrue; } RunTimeProblem(RTP_RELKINDVIOLATION, L, R, Rel_Record_67); ]; [ RGuard_MF_0 L ! left member of pair R ! right member of pair ; if ((L ofclass K1_room) && (R ofclass K4_door)) { Relation_NowN1toV(R,door_to,L); rtrue; } RunTimeProblem(RTP_RELKINDVIOLATION, L, R, Rel_Record_67); ]; ! Routines guarding lock-fitting(L, R) [ RGuard_f0_1 X ! which is related to at most one object ; if (X ofclass K2_thing) return (X.with_key); return nothing; ]; [ RGuard_f1_1 X ! which is related to at most one object ; return nothing; ]; [ RGuard_T_1 L ! left member of pair R ! right member of pair ; rfalse; ]; [ RGuard_MT_1 L ! left member of pair R ! right member of pair ; if ((L ofclass K2_thing) && (R ofclass K2_thing)) { R.with_key = L; rtrue; } RunTimeProblem(RTP_RELKINDVIOLATION, L, R, Rel_Record_69); ]; [ RGuard_MF_1 L ! left member of pair R ! right member of pair ; if ((L ofclass K2_thing) && (R ofclass K2_thing)) { Relation_NowN1toV(R,with_key,L); rtrue; } RunTimeProblem(RTP_RELKINDVIOLATION, L, R, Rel_Record_69); ]; ! Routines guarding unbolting(L, R) [ RGuard_f0_2 X ! which is related to at most one object ; if (X ofclass K2_thing) return (X.p59_unbolting_relation_stora); return nothing; ]; [ RGuard_f1_2 X ! which is related to at most one object ; return nothing; ]; [ RGuard_T_2 L ! left member of pair R ! right member of pair ; rfalse; ]; [ RGuard_MT_2 L ! left member of pair R ! right member of pair ; if ((L ofclass K16_passkey) && (R ofclass K2_thing)) { R.p59_unbolting_relation_stora = L; rtrue; } RunTimeProblem(RTP_RELKINDVIOLATION, L, R, Rel_Record_71); ]; [ RGuard_MF_2 L ! left member of pair R ! right member of pair ; if ((L ofclass K16_passkey) && (R ofclass K2_thing)) { Relation_NowN1toV(R,p59_unbolting_relation_stora,L); rtrue; } RunTimeProblem(RTP_RELKINDVIOLATION, L, R, Rel_Record_71); ]; [ Noun_Filter_0 x ! saved value of noun ; x=noun; return ((noun ofclass K16_passkey)); ]; [ Noun_Filter_1 x ! saved value of noun ; x=noun; return ((noun ofclass K17_keychain)); ]; [ Noun_Filter_2 x ! saved value of noun ; x=noun; return ((noun ofclass K3_direction)); ]; [ Noun_Filter_3 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; [ Noun_Filter_4 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; [ Noun_Filter_5 x ! saved value of noun ; x=noun; return ((noun ofclass K3_direction)); ]; [ Noun_Filter_6 x ! saved value of noun ; x=noun; return ((noun ofclass K3_direction)); ]; [ Noun_Filter_7 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; [ Noun_Filter_8 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; [ Noun_Filter_9 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; [ Noun_Filter_10 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; [ Noun_Filter_11 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_84_t1_v10(noun)))); ]; [ Noun_Filter_12 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_80_t1_v10(noun))) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_13 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_14 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_80_t1_v10(noun))) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_15 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_16 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_79_t1_v10(noun))) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_17 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_18 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_79_t1_v10(noun))) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_19 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_20 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_79_t1_v10(noun))) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_21 x ! saved value of noun ; x=noun; return ((noun ofclass K2_thing) && ((Adj_78_t1_v10(noun)))); ]; [ Noun_Filter_22 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; [ Noun_Filter_23 v ! value parsed n ! saved value of noun ; v = DECIMAL_TOKEN(); if (v == GPR_NUMBER) { n = noun; noun = parsed_number; if (~~(((true) && (true)))) v = GPR_FAIL; noun = n; } return v; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Chronology ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Scheme I ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Present and Past ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Chronology Point ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ChronologyPoint pt; for (pt=0:ptpt = present_chronological_record-->pt; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Update Chronological Records Rule ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ UPDATE_CHRONOLOGICAL_RECORDS_R pt; for (pt=0: pt PAPR_0 PAPR_1 PAPR_2 PAPR_3 PAPR_4 PAPR_5 PAPR_6 PAPR_7 0 0; Constant NO_PAST_TENSE_CONDS 0; Constant NO_PAST_TENSE_ACTIONS 8; [ TestSinglePastState past_flag ! Implied call parameter pt ! Implied call parameter turn_end ! Implied call parameter wanted ! Implied call parameter old ! internal use only new ! internal use only trips ! internal use only consecutives ! internal use only ; if (past_flag) { new = (past_chronological_record-->pt) & 1; trips = ((past_chronological_record-->pt) & $$11111110)/2; consecutives = ((past_chronological_record-->pt) & $$111111100000000)/256; } else { old = (present_chronological_record-->pt) & 1; trips = ((present_chronological_record-->pt) & $$11111110)/2; consecutives = ((present_chronological_record-->pt) & $$111111100000000)/256; switch(pt) { default: print "*** No such past tense condition ***^"; new = false; } if (new) { if (old == false) { trips++; if (trips > 127) trips = 127; } if (turn_end) { consecutives++; if (consecutives > 127) consecutives = 127; } } else { consecutives = 0; } present_chronological_record-->pt = new + 2*trips + 256*consecutives; } switch(wanted) { 0: if (new) return new; 1: if (new) return trips; 2: if (new) return consecutives+1; ! Plus one because we count the current turn 4: return new; 5: return trips; 6: return consecutives; } return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Scheme II ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Past Action Routines ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Track Actions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TrackActions readjust oow i; for (i=0: PastActionsI6Routines-->i: i++) { if ((PastActionsI6Routines-->i).call()) { ! Yes, the current action matches action pattern i: if (readjust) continue; (TimesActionHasHappened-->i)++; if (LastTurnActionHappenedOn-->i ~= turns + 5) { LastTurnActionHappenedOn-->i = turns + 5; ActionCurrentlyHappeningFlag->i = 1; if (keep_silent == false) (TurnsActionHasBeenHappening-->i)++; } } else { ! No, the current action doesn't match action pattern i: if (oow == false) { if (keep_silent == false) { TurnsActionHasBeenHappening-->i = 0; } if (LastTurnActionHappenedOn-->i ~= turns + 5) ActionCurrentlyHappeningFlag->i = 0; } } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Chronology.i6t: Storage ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array TimesActionHasHappened-->(NO_PAST_TENSE_ACTIONS+1); Array TurnsActionHasBeenHappening-->(NO_PAST_TENSE_ACTIONS+1); Array LastTurnActionHappenedOn-->(NO_PAST_TENSE_ACTIONS+1); Array ActionCurrentlyHappeningFlag->(NO_PAST_TENSE_ACTIONS+1); Array past_chronological_record-->(NO_PAST_TENSE_CONDS+1); Array present_chronological_record-->(NO_PAST_TENSE_CONDS+1); ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Grammar ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ Parse_Name_GV1 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV2 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV3 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV4 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV5 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV6 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV7 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV8 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV9 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV10 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV11 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV12 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV13 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (Cond_Token_12() == GPR_FAIL) jump Fail_1; if (NextWordStopped() ~= 'your') jump Fail_1; if (NextWordStopped() ~= 'former') jump Fail_1; if (NextWordStopped() ~= 'self') jump Fail_1; try_from_wn = wn; f = true; continue; .Fail_1; wn = try_from_wn; if (Cond_Token_13() == GPR_FAIL) jump Fail_2; if (NextWordStopped() ~= 'my') jump Fail_2; if (NextWordStopped() ~= 'former') jump Fail_2; if (NextWordStopped() ~= 'self') jump Fail_2; try_from_wn = wn; f = true; continue; .Fail_2; wn = try_from_wn; if (Cond_Token_14() == GPR_FAIL) jump Fail_3; if (NextWordStopped() ~= 'former') jump Fail_3; if (NextWordStopped() ~= 'self') jump Fail_3; try_from_wn = wn; f = true; continue; .Fail_3; wn = try_from_wn; if (Cond_Token_15() == GPR_FAIL) jump Fail_4; if (NextWordStopped() ~= 'former') jump Fail_4; try_from_wn = wn; f = true; continue; .Fail_4; wn = try_from_wn; break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV97 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV99 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV100 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV101 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV102 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV103 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV104 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV106 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV107 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV108 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV109 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV110 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV111 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV112 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Parse_Name_GV113 original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction try_from_wn ! position to try matching from n ! number of words matched f ! flag: sufficiently good match found to justify success w ! for use by individual grammar lines rv ! for use by individual grammar lines g ! temporary: success flag for parsing visibles ss ! temporary: saves 'self' in distinguishing visibles spn ! temporary: saves 'parsed_number' in parsing visibles pass ! pass counter (1 to 3) pass1_n ! value of n recorded during pass 1 pass2_n ! value of n recorded during pass 2 ; #ifdef DEBUG; if (parser_trace >= 3) print "Parse_name called^"; #endif; if (parser_action == ##TheSame) return 0; original_wn = wn; for (pass = 1: pass <= 3: pass++) { wn = original_wn; try_from_wn = wn; f = false; n = 0; while (true) { ! On pass 1 only, advance wn past name property words ! (but do not do this for ##TheSame, when wn is undefined) if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } if (pass == 1 or 2) { } if ((parser_action ~= ##TheSame) && (pass == 1)) { while (WordInProperty(NextWordStopped(), self, name)) f = true; wn--; try_from_wn = wn; } break; } ! End of endless loop while (WordInProperty(NextWordStopped(), self, name)) n++; if ((f) || (n>0)) n = n + try_from_wn - original_wn; if (pass == 1) pass1_n = n; if (pass == 2) pass2_n = n; } ! End of pass loop #ifdef DEBUG; if (parser_trace >= 3) print "Pass 1: ", pass1_n, " Pass 2: ", pass2_n, " Pass 3: ", n, "^"; #endif; if (pass1_n > n) n = pass1_n; if (pass2_n > n) n = pass2_n; wn = original_wn + n; if (n == 0) return -1; DetectPluralWord(original_wn, n); return n; ]; [ Consult_Grammar_120 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'restart') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_121 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'restore') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_122 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'amusing') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_123 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'quit') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_124 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'undo') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_125 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'stand') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_126 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'sit') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; [ Consult_Grammar_127 range_from ! call parameter: word number of snippet start range_words ! call parameter: snippet length original_wn ! first word of text parsed group_wn ! first word matched against A/B/C/... disjunction w ! for use by individual grammar lines rv ! for use by individual grammar lines ; wn = range_from; original_wn = wn; rv = GPR_PREPOSITION; if (NextWordStopped() ~= 'lie') jump Fail_1; if ((range_words==0) || (wn-range_from==range_words)) return rv; .Fail_1; rv = GPR_PREPOSITION; wn = original_wn; return GPR_FAIL; ]; Verb 'take' 'carry' 'hold' * 'inventory' -> Inv * multi -> Take * 'off' noun -> Disrobe * noun 'off' -> Disrobe * multiinside 'from' noun -> Remove * multiinside 'off' noun -> Remove ; Verb 'get' * 'out' / 'off' / 'down' / 'up' -> Exit * 'in' / 'on' -> Enter * multi -> Take * 'in' / 'into' / 'on' / 'onto' noun -> Enter * 'off' / 'down' noun -> GetOff * multiinside 'from' noun -> Remove ; Verb 'pick' * 'up' multi -> Take * multi 'up' -> Take ; Verb 'stand' * -> Exit * 'up' -> Exit * 'on' noun -> Enter ; Verb 'remove' * held -> Disrobe * multiinside 'from' noun -> Remove ; Verb 'shed' 'doff' 'disrobe' * held -> Disrobe ; Verb 'wear' 'don' * held -> Wear ; Verb 'put' * 'on' held -> Wear * held 'on' -> Wear * 'down' multiheld -> Drop * multiheld 'down' -> Drop * noun=Noun_Filter_0 'on' noun=Noun_Filter_1 -> PutOn * multiexcept 'in' / 'inside' / 'into' noun -> Insert * multiexcept 'on' / 'onto' noun -> PutOn ; Verb 'insert' * multiexcept 'in' / 'into' noun -> Insert ; Verb 'drop' 'throw' 'discard' * multiheld -> Drop * held 'at' / 'against' noun -> ThrowAt * multiexcept 'in' / 'into' / 'down' noun -> Insert * multiexcept 'on' / 'onto' noun -> PutOn ; Verb 'give' 'pay' 'offer' 'feed' * creature held -> Give reverse * held 'to' creature -> Give ; Verb 'show' 'present' 'display' * creature held -> Show reverse * held 'to' creature -> Show ; Verb 'go' 'walk' 'run' * -> Go * noun=Noun_Filter_2 -> Go * noun -> Enter * 'into' / 'in' / 'inside' / 'through' noun -> Enter ; Verb 'inventory' 'i//' 'inv' * -> Inv ; Verb 'look' 'l//' * -> Look * noun -> Examine * 'at' noun -> Examine * 'inside' / 'in' / 'into' / 'through' noun -> Search * 'under' noun -> LookUnder * 'up' topic 'in' noun -> Consult reverse ; Verb 'consult' * noun 'on' / 'about' topic -> Consult ; Verb 'unwrap' * noun -> Open ; Verb 'close' 'shut' 'cover' * noun -> Close * 'up' noun -> Close * 'off' noun -> SwitchOff ; Verb 'enter' 'cross' * -> Enter * Mistake_Token_184 DECIMAL_TOKEN -> MistakeAction * noun -> Enter * Mistake_Token_185 DECIMAL_TOKEN topic -> MistakeAction ; Verb 'sit' * 'on' / 'in' / 'inside' noun -> Enter * 'on' 'top' 'of' noun -> Enter ; Verb 'exit' 'leave' 'out' * -> Exit ; Verb 'examine' 'x//' 'watch' 'describe' 'check' * noun -> Examine ; Verb 'read' * noun -> Examine * 'about' topic 'in' noun -> Consult reverse * topic 'in' noun -> Consult reverse ; Verb 'yes' 'y//' * -> Yes ; Verb 'no' * -> No ; Verb 'sorry' * -> Sorry ; Verb 'search' * noun -> Search ; Verb 'wave' * -> WaveHands * noun -> Wave ; Verb 'set' 'adjust' * noun 'to' topic -> SetTo ; Verb 'pull' 'drag' * noun -> Pull ; Verb 'push' 'move' 'shift' 'clear' 'press' * Mistake_Token_186 DECIMAL_TOKEN -> MistakeAction * Mistake_Token_188 DECIMAL_TOKEN -> MistakeAction * noun -> Push * noun noun=Noun_Filter_5 -> PushDir * noun 'to' noun=Noun_Filter_6 -> PushDir * Mistake_Token_187 DECIMAL_TOKEN topic -> MistakeAction * Mistake_Token_189 DECIMAL_TOKEN topic -> MistakeAction ; Verb 'turn' 'rotate' 'twist' 'unscrew' 'screw' * noun -> A81_unscrewing * noun 'on' -> SwitchOn * 'on' noun -> SwitchOn * noun 'off' -> SwitchOff * 'off' noun -> SwitchOff ; Verb 'switch' * noun=Noun_Filter_11 -> SwitchOff * noun -> SwitchOn * 'on' noun -> SwitchOn * noun 'on' -> SwitchOn * noun 'off' -> SwitchOff * 'off' noun -> SwitchOff ; Verb 'lock' * noun=Noun_Filter_14 -> A78_locking_keylessly * noun=Noun_Filter_15 -> A78_locking_keylessly * noun -> A78_locking_keylessly * noun=Noun_Filter_12 'with' noun -> Lock * noun=Noun_Filter_13 'with' noun -> Lock * noun '|__' 'with' noun -> Lock ; Verb 'unlock' * noun=Noun_Filter_18 -> A77_unlocking_keylessly * noun=Noun_Filter_19 -> A77_unlocking_keylessly * noun -> A77_unlocking_keylessly * noun=Noun_Filter_16 'with' noun -> Unlock * noun=Noun_Filter_17 'with' noun -> Unlock * noun 'with' noun -> Unlock ; Verb 'attack' 'break' 'smash' 'hit' 'fight' 'torture' 'wreck' 'crack' 'destroy' 'murder' 'kill' 'punch' 'thump' * noun -> Attack ; Verb 'wait' 'z//' * -> Wait ; Verb 'answer' 'say' 'shout' 'speak' * topic 'to' creature -> Answer reverse ; Verb 'tell' * creature 'about' topic -> Tell ; Verb 'ask' * creature 'for' noun -> AskFor * creature 'about' topic -> Ask ; Verb 'eat' * held -> Eat ; Verb 'sleep' 'nap' * -> Sleep ; Verb 'climb' 'scale' * noun -> Climb * 'up' / 'over' noun -> Climb ; Verb 'buy' 'purchase' * noun -> Buy ; Verb 'squeeze' 'squash' * noun -> Squeeze ; Verb 'swing' * noun -> Swing * 'on' noun -> Swing ; Verb 'wake' 'awake' 'awaken' * -> Wake * 'up' -> Wake * creature -> WakeOther * creature 'up' -> WakeOther * 'up' creature -> WakeOther ; Verb 'kiss' 'embrace' 'hug' * creature -> Kiss ; Verb 'think' * -> Think ; Verb 'smell' 'sniff' * -> Smell * noun -> Smell ; Verb 'listen' * -> Listen * 'to' noun -> Listen ; Verb 'hear' * noun -> Listen ; Verb 'taste' * noun -> Taste ; Verb 'touch' 'feel' * noun -> Touch ; Verb 'rub' 'shine' 'polish' 'sweep' 'clean' 'dust' 'wipe' 'scrub' * noun -> Rub ; Verb 'tie' 'attach' 'fasten' * noun 'to' noun -> Tie ; Verb 'burn' 'light' * noun -> Burn ; Verb 'drink' 'swallow' 'sip' * noun -> Drink ; Verb 'cut' 'slice' 'prune' 'chop' * noun -> Cut ; Verb 'jump' 'skip' 'hop' * -> Jump ; Verb 'score' * -> Score ; Verb 'quit' * -> Quit ; Verb 'q//' * -> Quit ; Verb 'save' * -> Save ; Verb 'restart' * -> Restart ; Verb 'restore' * -> Restore ; Verb 'verify' * -> Verify ; Verb 'version' * -> Version ; Verb 'script' * -> ScriptOn * 'on' -> ScriptOn * 'off' -> ScriptOff ; Verb 'transcript' * -> ScriptOn * 'on' -> ScriptOn * 'off' -> ScriptOff ; Verb 'superbrief' * -> LMode3 ; Verb 'short' * -> LMode3 ; Verb 'verbose' * -> LMode2 ; Verb 'long' * -> LMode2 ; Verb 'brief' * -> LMode1 ; Verb 'normal' * -> LMode1 ; Verb 'nouns' * -> Pronouns ; Verb 'pronouns' * -> Pronouns ; Verb 'notify' * -> NotifyOn * 'on' -> NotifyOn * 'off' -> NotifyOff ; Verb 'open' * noun -> Open * noun=Noun_Filter_20 'with' noun -> Unlock * noun=Noun_Filter_21 'with' noun -> Unlock * noun 'with' noun -> Unlock ; Verb 'uncover' * noun -> Open ; Verb 'escape' * -> A79_escaping ; Verb 'type' * Mistake_Token_182 -> MistakeAction * DECIMAL_TOKEN -> A80_typing * Mistake_Token_183 DECIMAL_TOKEN topic -> MistakeAction ; Verb 'flip' * noun -> SwitchOn ; Verb 'knock' * noun -> Attack * 'on' noun -> Attack ; Verb 'help' * -> A82_helping ; Verb 'about' * -> A82_helping ; Verb 'guide' * -> A82_helping ; Verb 'info' * -> A82_helping ; Verb 'hint' * -> A83_hinting ; Verb 'hints' * -> A83_hinting ; #IFTRUE (0 == 1); [ UnknownVerb; verb_wordnum = 0; return 'no.verb'; ]; [ PrintVerb v; if (v == 'no.verb') { print "do something to"; rtrue; } rfalse; ]; #Ifnot; [ UnknownVerb; rfalse; ]; [ PrintVerb v; rfalse; ]; #ENDIF; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Deferred Propositions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Miscellaneous Loose Ends ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant TX_PS_139 = ">"; Constant TX_PS_117 = "A black, skeletal, metal staircase, leading up to a landing just outside the windowed room."; Constant TX_PS_111 = "A black, skeletal, metal staircase, leading up to a landing. At the bottom of one of the railings is a pole with a red light glowing on it, probably to tell others to stay away from the floor."; Constant TX_PS_120 = "A charcoal gray steel door, the only thing standing between you and solving this mystery. You hope it isn't locked."; Constant TX_PS_136 = "A cheap, off-white plastic table. Must've been the best price they could find for a table that could stand."; Constant TX_PS_81 = "A four-legged metal stool. Standing on it is the block of ice. Attached to the underside of its seat is some gadgetry, that presumably powers the vents."; Constant TX_PS_92 = "A functional metal table."; Constant TX_PS_100 = "A mostly dulled Phillips-head screwdriver."; Constant TX_PS_62 = "A narrow slit in this steel contraption."; Constant TX_PS_44 = "A normal-looking key."; Constant TX_PS_40 = "A plain beige door, set into the north wall of the room."; Constant TX_PS_95 = "A rusted, cheap-looking hammer."; Constant TX_PS_58 = "A small black button, set into the side of the machine."; Constant TX_PS_60 = "A small velvet compartment. It looks like it could just barely fit, say, a key within."; Constant TX_PS_88 = "A solid-looking wooden desk, with a single drawer attached."; Constant TX_PS_86 = "A strange orange berry that radiates heat."; Constant TX_PS_64 = "A strangely thick key, too wide for the door's lock."; Constant TX_PS_97 = "A sturdy metal box, about the size of a shoebox. It has a large lock on the lid."; Constant TX_PS_113 = "A tubular red light, simply glowing."; Constant TX_PS_116 = "A tubular yellow light, simply glowing, perhaps to warn people coming down... or people coming up."; Constant TX_PS_107 = "A wide, plate glass window overlooking the floor and the fake room. No doubt whoever's in there was watching you."; Constant TX_PS_90 = "A wooden drawer, below the right end of the desk."; Constant TX_PS_130 = "Although it may not be as hopeless as you thought; there's another door across the room, along the western wall. You'll have to be quick, but you might make it."; Constant TX_PS_3 = "An Interactive Fiction"; Constant TX_PS_71 = "An ordinary-looking light switch, positioned below the left bulb."; Constant TX_PS_73 = "An ordinary-looking light switch, positioned below the right bulb."; Constant TX_PS_34 = "As good-looking as ever."; Constant TX_PS_42 = "Barren, white."; Constant TX_PS_4 = "Earth Traveler"; Constant TX_PS_84 = "Gadgetry"; Constant TX_PS_104 = "Giant lights dangling from the faraway ceiling, providing some pools of light on the floor below. Only the ones hanging in the airspace around the room are lit though."; Constant TX_PS_124 = "His expression is impossible to read."; Constant TX_PS_127 = "Impossible to make out anything besides the hazmat suit he's wearing."; Constant TX_PS_132 = "It feels stiff and bristly."; Constant TX_PS_83 = "It is entirely encased in metal, with no exposed parts to damage to let the ice melt."; Constant TX_PS_138 = "It provides a surprisingly good view into the fake room, you can even see all the stuff in there from this angle."; Constant TX_PS_56 = "It's a mechanical beast, a mess of gears and wires, part of it covered by a layer of glass and the rest by more opaque steel. There's a button on the side, a slot just below that, and a velvet compartment below the section of visible gears."; Constant TX_PS_66 = "It's made of white plastic, with black keys having every number 0 through 9 on them, and it looks like it's meant to take a four-digit code. It's set in the wall next to the door."; Constant TX_PS_109 = "Just an illusion."; Constant TX_PS_114 = "Lower Landing"; Constant TX_PS_36 = "Mysterious Room"; Constant TX_PS_121 = "Observation Room"; Constant TX_PS_145 = "QUIT"; Constant TX_PS_142 = "RESTART"; Constant TX_PS_143 = "RESTORE a saved game"; Constant TX_PS_134 = "Rather tasteful, considering the rest of the room's shape."; Constant TX_PS_129 = "Slightly off-shade from the surrounding paneling, and your only hope to get out of this room."; Constant TX_PS_140 = "Surreal"; Constant TX_PS_101 = "Testing Area"; Constant TX_PS_2 = "The Game That Never Ends"; Constant TX_PS_37 = "The room is practically barren, with a pure white halogen lamp set in the ceiling and four utterly undecorated walls. Apart from the strange gizmos sharing the room with you, it's empty."; Constant TX_PS_125 = "There's a man here, looks like he's in his forties or fifties, already most of the way to bald with gray hair. He wears a gray shirt, black slacks, and a black vest, and has a United States Air Force patch sewn onto the latter. He's standing up, but half-leaning, half-sitting on the table, with his arms crossed, looking right at you with an impassive expression."; Constant TX_PS_69 = "There's two tall, tubular, fluorescent type light bulbs set up next to each other on one of the walls, both of them turned off. Beneath each one is a switch. In between the bulbs, nailed into the wall is a small label, unreadable from a distance."; Constant TX_PS_149 = "Try to TYPE the number instead."; Constant TX_PS_147 = "Try to type a number next time."; Constant TX_PS_78 = "Two AC vents, keeping the ice from melting on its own. You don't see any way of turning them off."; Constant TX_PS_146 = "UNDO the last command"; Constant TX_PS_118 = "Upper Landing"; Constant TX_PS_79 = "Vents"; Constant TX_PS_141 = "Welcome back my friends, to The Game That Never Ends! Or does it?"; Constant TX_PS_122 = "You burst into a green-carpeted, wood-paneled room. There's a door on the western wall, and the window does indeed overlook the fake room, but what immediately catches your attention are the two people in the middle of the room, next to a crummy white plastic table."; Constant TX_PS_150 = "You just need to TYPE a number, and there's no need to specify on what."; Constant TX_PS_148 = "You just need to TYPE a number, no need to specify on what."; Constant TX_PS_75 = "You squint and make out the single word written on the label: ~HELP~"; Constant TX_PS_35 = "Yourself"; Constant TX_PS_123 = "agent"; Constant TX_PS_10 = "animals"; Constant TX_PS_126 = "astronaut"; Constant TX_PS_15 = "backdrops"; Constant TX_PS_39 = "beige door"; Constant TX_PS_76 = "block of ice"; Array TX_L_76 --> CONSTANT_PACKED_TEXT_STORAGE TX_PS_76; Constant TX_PS_49 = "book"; Constant TX_PS_57 = "button"; Constant TX_PS_131 = "carpet"; Constant TX_PS_12 = "containers"; Constant TX_PS_135 = "crummy white plastic table"; Constant TX_PS_87 = "desk"; Constant TX_PS_16 = "devices"; Constant TX_PS_48 = "diagram"; Constant TX_PS_19 = "directions"; Constant TX_PS_11 = "doors"; Constant TX_PS_30 = "down"; Constant TX_PS_89 = "drawer"; Constant TX_PS_27 = "east"; Constant TX_PS_65 = "electronic keypad"; Constant TX_PS_105 = "equipment"; Constant TX_PS_108 = "fake room"; Constant TX_PS_54 = "footnote"; Constant TX_PS_82 = "gadgetry"; Constant TX_PS_38 = "halogen lamp"; Constant TX_PS_94 = "hammer"; Constant TX_PS_31 = "inside"; Constant TX_PS_47 = "journal"; Constant TX_PS_6 = "keychains"; Constant TX_PS_74 = "label"; Constant TX_PS_70 = "left switch"; Constant TX_PS_51 = "letter"; Constant TX_PS_96 = "lockbox"; Constant TX_PS_53 = "memo"; Constant TX_PS_8 = "men"; Constant TX_PS_20 = "north"; Constant TX_PS_22 = "northeast"; Constant TX_PS_23 = "northwest"; Constant TX_PS_45 = "note"; Constant TX_PS_85 = "orange berry"; Constant TX_PS_32 = "outside"; Constant TX_PS_68 = "pair of lights"; Constant TX_PS_46 = "paper"; Constant TX_PS_17 = "passkeys"; Constant TX_PS_7 = "people"; Constant TX_PS_14 = "player's holdalls"; Constant TX_PS_67 = "printed slip"; Constant TX_PS_151 = "puddle"; Array TX_L_151 --> CONSTANT_PACKED_TEXT_STORAGE TX_PS_151; Constant TX_PS_112 = "red light"; Constant TX_PS_18 = "regions"; Constant TX_PS_72 = "right switch"; Constant TX_PS_99 = "screwdriver"; Constant TX_PS_52 = "scroll"; Constant TX_PS_144 = "see some suggestions for AMUSING things to do"; Constant TX_PS_93 = "slide puzzle box"; Constant TX_PS_61 = "slot"; Constant TX_PS_24 = "south"; Constant TX_PS_25 = "southeast"; Constant TX_PS_26 = "southwest"; Constant TX_PS_103 = "spotlights"; Constant TX_PS_110 = "staircase"; Constant TX_PS_119 = "steel door"; Constant TX_PS_80 = "stool"; Constant TX_PS_55 = "strange machine"; Constant TX_PS_5 = "supporters"; Constant TX_PS_91 = "table"; Constant TX_PS_102 = "tape"; Constant TX_PS_21 = "the"; Constant TX_PS_43 = "thin key"; Constant TX_PS_50 = "torn report"; Constant TX_PS_29 = "up"; Constant TX_PS_13 = "vehicles"; Constant TX_PS_59 = "velvet compartment"; Constant TX_PS_77 = "vents"; Constant TX_PS_41 = "wall"; Constant TX_PS_28 = "west"; Constant TX_PS_63 = "wide key"; Constant TX_PS_137 = "window"; Constant TX_PS_106 = "windowed room"; Constant TX_PS_9 = "women"; Constant TX_PS_98 = "wooden box"; Constant TX_PS_128 = "wooden door"; Constant TX_PS_133 = "wooden paneling walls"; Constant TX_PS_115 = "yellow light"; Constant TX_PS_33 = "yourself"; Array TX_L_33 --> CONSTANT_PACKED_TEXT_STORAGE TX_PS_33; #ifndef p0_specification; Constant p0_specification = 0; #endif; #ifndef p1_indefinite_appearance_tex; Constant p1_indefinite_appearance_tex = 0; #endif; #ifndef p2_variable_initial_value; Constant p2_variable_initial_value = 0; #endif; #ifndef list_together; Constant list_together = 0; #endif; #ifndef short_name; Constant short_name = 0; #endif; #ifndef plural; Constant plural = 0; #endif; #ifndef article; Constant article = 0; #endif; #ifndef description; Constant description = 0; #endif; #ifndef map_region; Constant map_region = 0; #endif; #ifndef initial; Constant initial = 0; #endif; #ifndef p10_opposite; Constant p10_opposite = 0; #endif; #ifndef door_to; Constant door_to = 0; #endif; #ifndef capacity; Constant capacity = 0; #endif; #ifndef with_key; Constant with_key = 0; #endif; #ifndef p14_adaptive_text_viewpoint; Constant p14_adaptive_text_viewpoint = 0; #endif; #ifndef pluralname; Constant pluralname = 0; #endif; #ifndef proper; Constant proper = 0; #endif; #ifndef ambigpluralname; Constant ambigpluralname = 0; #endif; #ifndef privately_named; Constant privately_named = 0; #endif; #ifndef light; Constant light = 0; #endif; #ifndef visited; Constant visited = 0; #endif; #ifndef light; Constant light = 0; #endif; #ifndef edible; Constant edible = 0; #endif; #ifndef static; Constant static = 0; #endif; #ifndef scenery; Constant scenery = 0; #endif; #ifndef clothing; Constant clothing = 0; #endif; #ifndef pushable; Constant pushable = 0; #endif; #ifndef moved; Constant moved = 0; #endif; #ifndef concealed; Constant concealed = 0; #endif; #ifndef workflag; Constant workflag = 0; #endif; #ifndef mentioned; Constant mentioned = 0; #endif; #ifndef enterable; Constant enterable = 0; #endif; #ifndef transparent; Constant transparent = 0; #endif; #ifndef open; Constant open = 0; #endif; #ifndef openable; Constant openable = 0; #endif; #ifndef lockable; Constant lockable = 0; #endif; #ifndef locked; Constant locked = 0; #endif; #ifndef female; Constant female = 0; #endif; #ifndef neuter; Constant neuter = 0; #endif; #ifndef on; Constant on = 0; #endif; #ifndef p57_recurring; Constant p57_recurring = 0; #endif; #ifndef p59_unbolting_relation_stora; Constant p59_unbolting_relation_stora = 0; #endif; #ifndef vector; Constant vector = 0; #endif; #ifndef room_index; Constant room_index = 0; #endif; #ifndef door_dir; Constant door_dir = 0; #endif; #ifndef door_to; Constant door_to = 0; #endif; #ifndef found_in; Constant found_in = 0; #endif; #ifndef absent; Constant absent = 0; #endif; #ifndef cap_short_name; Constant cap_short_name = 0; #endif; #ifndef mark_as_room; Constant mark_as_room = 0; #endif; #ifndef mark_as_thing; Constant mark_as_thing = 0; #endif; #ifndef component_parent; Constant component_parent = 0; #endif; #ifndef component_child; Constant component_child = 0; #endif; #ifndef component_sibling; Constant component_sibling = 0; #endif; #ifndef regional_found_in; Constant regional_found_in = 0; #endif; #ifndef IK1_Count; Constant IK1_Count = 0; #endif; #ifndef IK1_Link; Constant IK1_Link = 0; #endif; #ifndef IK2_Count; Constant IK2_Count = 0; #endif; #ifndef IK2_Link; Constant IK2_Link = 0; #endif; #ifndef IK3_Count; Constant IK3_Count = 0; #endif; #ifndef IK3_Link; Constant IK3_Link = 0; #endif; #ifndef IK4_Count; Constant IK4_Count = 0; #endif; #ifndef IK4_Link; Constant IK4_Link = 0; #endif; #ifndef IK5_Count; Constant IK5_Count = 0; #endif; #ifndef IK5_Link; Constant IK5_Link = 0; #endif; #ifndef IK6_Count; Constant IK6_Count = 0; #endif; #ifndef IK6_Link; Constant IK6_Link = 0; #endif; #ifndef IK7_Count; Constant IK7_Count = 0; #endif; #ifndef IK7_Link; Constant IK7_Link = 0; #endif; #ifndef IK8_Count; Constant IK8_Count = 0; #endif; #ifndef IK8_Link; Constant IK8_Link = 0; #endif; #ifndef IK9_Count; Constant IK9_Count = 0; #endif; #ifndef IK9_Link; Constant IK9_Link = 0; #endif; #ifndef IK10_Count; Constant IK10_Count = 0; #endif; #ifndef IK10_Link; Constant IK10_Link = 0; #endif; #ifndef IK11_Count; Constant IK11_Count = 0; #endif; #ifndef IK11_Link; Constant IK11_Link = 0; #endif; #ifndef IK12_Count; Constant IK12_Count = 0; #endif; #ifndef IK12_Link; Constant IK12_Link = 0; #endif; #ifndef IK13_Count; Constant IK13_Count = 0; #endif; #ifndef IK13_Link; Constant IK13_Link = 0; #endif; #ifndef IK14_Count; Constant IK14_Count = 0; #endif; #ifndef IK14_Link; Constant IK14_Link = 0; #endif; #ifndef IK15_Count; Constant IK15_Count = 0; #endif; #ifndef IK15_Link; Constant IK15_Link = 0; #endif; #ifndef IK16_Count; Constant IK16_Count = 0; #endif; #ifndef IK16_Link; Constant IK16_Link = 0; #endif; #ifndef IK17_Count; Constant IK17_Count = 0; #endif; #ifndef IK17_Link; Constant IK17_Link = 0; #endif; #ifndef KD_Count; Constant KD_Count = 0; #endif; #ifndef name; Constant name = 0; #endif; #ifndef parse_name; Constant parse_name = 0; #endif; #ifndef action_bitmap; Constant action_bitmap = 0; #endif; #IFNDEF cap_short_name; Constant cap_short_name = short_name; #ENDIF; Array I7_ST_say_one_of --> 8; Array I7_ST_say_one_flag --> 8; Array I7_ST_say_first_time --> 4; Array Runtime_Quotations_Displayed --> 1; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Block Values ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifdef TARGET_ZCODE; Constant MEMORY_HEAP_SIZE = 8192; #ifnot; Constant MEMORY_HEAP_SIZE = 32768; #endif; Array Closure_0 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Abs ! routine to call "abs function" ! name ; Array Closure_1 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Root ! routine to call "root function" ! name ; Array Closure_2 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number PHR_424_r5 ! routine to call "rsqr function" ! name ; Array Closure_3 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Ceiling ! routine to call "ceiling function" ! name ; Array Closure_4 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Floor ! routine to call "floor function" ! name ; Array Closure_5 --> KD11_phrase_real_number_to_num ! phrase real number -> number REAL_NUMBER_TY_to_NUMBER_TY ! routine to call "int function" ! name ; Array Closure_6 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Log ! routine to call "log function" ! name ; Array Closure_7 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Exp ! routine to call "exp function" ! name ; Array Closure_8 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Sin ! routine to call "sin function" ! name ; Array Closure_9 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Cos ! routine to call "cos function" ! name ; Array Closure_10 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Tan ! routine to call "tan function" ! name ; Array Closure_11 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Arcsin ! routine to call "arcsin function" ! name ; Array Closure_12 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Arccos ! routine to call "arccos function" ! name ; Array Closure_13 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Arctan ! routine to call "arctan function" ! name ; Array Closure_14 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Sinh ! routine to call "sinh function" ! name ; Array Closure_15 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Cosh ! routine to call "cosh function" ! name ; Array Closure_16 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number REAL_NUMBER_TY_Tanh ! routine to call "tanh function" ! name ; Array Closure_17 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number PHR_442_r6 ! routine to call "arcsinh function" ! name ; Array Closure_18 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number PHR_443_r7 ! routine to call "arccosh function" ! name ; Array Closure_19 --> KD10_phrase_real_number_to_rea ! phrase real number -> real number PHR_444_r8 ! routine to call "arctanh function" ! name ; Array KD0_list_of_actions --> ! list of actions LIST_OF_TY 1 STORED_ACTION_TY; Array Default_Value_0 --> (85721088) LIST_OF_TY MAX_POSITIVE_NUMBER STORED_ACTION_TY 0; Array KD1_rule --> ! rule RULE_TY 2 ACTION_NAME_TY NIL_TY; Array KD2_activity --> ! activity ACTIVITY_TY 1 NIL_TY; Array KD3_relation_of_values --> ! relation of values RELATION_TY 2 VALUE_TY VALUE_TY; Array KD4_relation_of_objects --> ! relation of objects RELATION_TY 2 OBJECT_TY OBJECT_TY; Array KD5_relation_of_supporters_to_ --> ! relation of supporters to things RELATION_TY 2 10 10; Array KD6_relation_of_things --> ! relation of things RELATION_TY 2 10 10; Array KD7_relation_of_people_to_thin --> ! relation of people to things RELATION_TY 2 10 10; Array KD8_relation_of_rooms_to_doors --> ! relation of rooms to doors RELATION_TY 2 10 10; Array KD9_relation_of_passkeys_to_th --> ! relation of passkeys to things RELATION_TY 2 10 10; Array KD10_phrase_real_number_to_rea --> ! phrase real number -> real number PHRASE_TY 2 REAL_NUMBER_TY; Array KD11_phrase_real_number_to_num --> ! phrase real number -> number PHRASE_TY 2 NUMBER_TY; [ DefaultValueFinder K ! Implied call parameter ; if (K == KD0_list_of_actions) return Default_Value_0; return 0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Blocks ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant BLK_HEADER_N = 0; Constant BLK_HEADER_FLAGS = 1; Constant BLK_FLAG_MULTIPLE = $$00000001; Constant BLK_FLAG_16_BIT = $$00000010; Constant BLK_FLAG_WORD = $$00000100; Constant BLK_FLAG_RESIDENT = $$00001000; Constant BLK_FLAG_TRUNCMULT = $$00010000; Constant BLK_HEADER_KOV = 1; Constant BLK_HEADER_RCOUNT = 2; Constant BLK_DATA_OFFSET = 3*WORDSIZE; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Multiple Blocks ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant BLK_DATA_MULTI_OFFSET = BLK_DATA_OFFSET + 2*WORDSIZE; Constant BLK_NEXT 3; Constant BLK_PREV 4; ! Constant BLKVALUE_TRACE = 1; ! Uncomment this for debugging purposes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: The Heap ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array Flex_Heap -> MEMORY_HEAP_SIZE + 16; ! Plus 16 to allow room for head-free-block ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Initialisation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ HeapInitialise n bsize blk2; blk2 = Flex_Heap + 16; Flex_Heap->BLK_HEADER_N = 4; Flex_Heap-->BLK_HEADER_KOV = 0; Flex_Heap-->BLK_HEADER_RCOUNT = MAX_POSITIVE_NUMBER; Flex_Heap->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; Flex_Heap-->BLK_NEXT = blk2; Flex_Heap-->BLK_PREV = NULL; for (bsize=1: bsize < MEMORY_HEAP_SIZE: bsize=bsize*2) n++; blk2->BLK_HEADER_N = n; blk2-->BLK_HEADER_KOV = 0; blk2-->BLK_HEADER_RCOUNT = 0; blk2->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; blk2-->BLK_NEXT = NULL; blk2-->BLK_PREV = Flex_Heap; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Net Free Space ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ HeapNetFreeSpace multiple txb asize; for (txb=Flex_Heap-->BLK_NEXT: txb~=NULL: txb=txb-->BLK_NEXT) { asize = asize + FlexSize(txb); if (multiple) asize = asize - BLK_DATA_MULTI_OFFSET; else asize = asize - BLK_DATA_OFFSET; } return asize; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Make Space ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant SMALLEST_BLK_WORTH_ALLOCATING = 12; ! i.e. 2^12 = 4096 bytes [ HeapMakeSpace size multiple newblocksize newblock B n; for (::) { if (multiple) { if (HeapNetFreeSpace(multiple) >= size) rtrue; } else { if (HeapLargestFreeBlock(0) >= size) rtrue; } newblocksize = 1; for (n=0: (nBLK_HEADER_N = n; newblock-->BLK_HEADER_KOV = 0; newblock-->BLK_HEADER_RCOUNT = 0; newblock->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; newblock-->BLK_NEXT = NULL; newblock-->BLK_PREV = NULL; for (B = Flex_Heap-->BLK_NEXT:B ~= NULL:B = B-->BLK_NEXT) if (B-->BLK_NEXT == NULL) { B-->BLK_NEXT = newblock; newblock-->BLK_PREV = B; jump Linked; } Flex_Heap-->BLK_NEXT = newblock; newblock-->BLK_PREV = Flex_Heap; .Linked; ; #ifdef BLKVALUE_TRACE; print "Increasing heap to free space map: "; FlexDebugDecomposition(Flex_Heap, 0); #endif; } rtrue; ]; [ HeapLargestFreeBlock multiple txb asize best; best = 0; for (txb=Flex_Heap-->BLK_NEXT: txb~=NULL: txb=txb-->BLK_NEXT) { asize = FlexSize(txb); if (multiple) asize = asize - BLK_DATA_MULTI_OFFSET; else asize = asize - BLK_DATA_OFFSET; if (asize > best) best = asize; } return best; ]; [ HeapDebug full; if (full) { print "Managing a heap of initially ", MEMORY_HEAP_SIZE+16, " bytes.^"; print HeapNetFreeSpace(false), " bytes currently free.^"; print "Free space decomposition: "; FlexDebugDecomposition(Flex_Heap); print "Free space map: "; FlexDebug(Flex_Heap); } else { print HeapNetFreeSpace(false), " of ", MEMORY_HEAP_SIZE+16, " bytes free.^"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Block Allocation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexAllocate size kov flags dsize n m free_block min_m max_m smallest_oversized_block secondhalf i hsize head tail; if (HeapMakeSpace(size, flags & BLK_FLAG_MULTIPLE) == false) FlexError("ran out"); ! Calculate the header size for a block of this KOV if (flags & BLK_FLAG_MULTIPLE) hsize = BLK_DATA_MULTI_OFFSET; else hsize = BLK_DATA_OFFSET; ! Calculate the data size n=0; for (dsize=1: ((dsize < hsize+size) || (n<3+(WORDSIZE/2))): dsize=dsize*2) n++; ! Seek a free block closest to the correct size, but starting from the ! block after the fixed head-free-block, which we can't touch min_m = 10000; max_m = 0; for (free_block = Flex_Heap-->BLK_NEXT: free_block ~= NULL: free_block = free_block-->BLK_NEXT) { m = free_block->BLK_HEADER_N; ! Current block the ideal size if (m == n) jump CorrectSizeFound; ! Current block too large: find the smallest which is larger than needed if (m > n) { if (min_m > m) { min_m = m; smallest_oversized_block = free_block; } } ! Current block too small: find the largest which is smaller than needed if (m < n) { if (max_m < m) { max_m = m; } } } if (min_m == 10000) { ! Case I: No block is large enough to hold the entire size if (flags & BLK_FLAG_MULTIPLE == 0) FlexError("too fragmented"); ! Set dsize to the size in bytes if the largest block available for (dsize=1: max_m > 0: dsize=dsize*2) max_m--; ! Split as a head (dsize-hsize), which we can be sure fits into one block, ! plus a tail (size-(dsize-hsize), which might be a list of blocks head = FlexAllocate(dsize-hsize, kov, flags); if (head == 0) FlexError("for head block not available"); tail = FlexAllocate(size-(dsize-hsize), kov, flags); if (tail == 0) FlexError("for tail block not available"); head-->BLK_NEXT = tail; tail-->BLK_PREV = head; return head; } ! Case II: No block is the right size, but some exist which are too big ! Set dsize to the size in bytes of the smallest oversized block for (dsize=1,m=1: m<=min_m: dsize=dsize*2) m++; free_block = smallest_oversized_block; while (min_m > n) { ! Repeatedly halve free_block at the front until the two smallest ! fragments left are the correct size: then take the frontmost dsize = dsize/2; ! print "Halving size to ", dsize, "^"; secondhalf = free_block + dsize; secondhalf-->BLK_NEXT = free_block-->BLK_NEXT; if (secondhalf-->BLK_NEXT ~= NULL) (secondhalf-->BLK_NEXT)-->BLK_PREV = secondhalf; secondhalf-->BLK_PREV = free_block; free_block-->BLK_NEXT = secondhalf; free_block->BLK_HEADER_N = (free_block->BLK_HEADER_N) - 1; secondhalf->BLK_HEADER_N = free_block->BLK_HEADER_N; secondhalf-->BLK_HEADER_KOV = free_block-->BLK_HEADER_KOV; secondhalf-->BLK_HEADER_RCOUNT = 0; secondhalf->BLK_HEADER_FLAGS = free_block->BLK_HEADER_FLAGS; min_m--; } ! Once that is done, free_block points to a block which is exactly the ! right size, so we can fall into... ! Case III: There is a free block which has the correct size. .CorrectSizeFound; ! Delete the free block from the double linked list of free blocks: note ! that it cannot be the head of this list, which is fixed if (free_block-->BLK_NEXT == NULL) { ! We remove final block, so previous is now final (free_block-->BLK_PREV)-->BLK_NEXT = NULL; } else { ! We remove a middle block, so join previous to next (free_block-->BLK_PREV)-->BLK_NEXT = free_block-->BLK_NEXT; (free_block-->BLK_NEXT)-->BLK_PREV = free_block-->BLK_PREV; } free_block-->BLK_HEADER_KOV = KindAtomic(kov); free_block-->BLK_HEADER_RCOUNT = 1; free_block->BLK_HEADER_FLAGS = flags; if (flags & BLK_FLAG_MULTIPLE) { free_block-->BLK_NEXT = NULL; free_block-->BLK_PREV = NULL; } ! Zero out the data bytes in the memory allocated for (i=hsize:ii=0; return free_block; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Errors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexError reason; print "*** Memory ", (string) reason, " ***^"; RunTimeProblem(RTP_HEAPERROR); @quit; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Merging ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexMergeInternal block first last pv nx; first = block; last = block; while (last-->BLK_NEXT == last+FlexSize(last)) last = last-->BLK_NEXT; while ((first-->BLK_PREV + FlexSize(first-->BLK_PREV) == first) && (first-->BLK_PREV ~= Flex_Heap)) first = first-->BLK_PREV; pv = first-->BLK_PREV; nx = last-->BLK_NEXT; #ifdef BLKVALUE_TRACE; print "Merging: "; FlexDebugDecomposition(pv-->BLK_NEXT, nx); print "^"; #endif; if (FlexRecutInternal(first, last)) { #ifdef BLKVALUE_TRACE; print " --> "; FlexDebugDecomposition(pv-->BLK_NEXT, nx); print "^"; #endif; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Recutting ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexRecutInternal first last tsize backsize mfrom mto bnext backend n dsize fine_so_far; if (first == last) rfalse; mfrom = first; mto = last + FlexSize(last); bnext = last-->BLK_NEXT; fine_so_far = true; for (:mto>mfrom: mto = mto - backsize) { for (n=0, backsize=1: backsize*2 <= mto-mfrom: n++) backsize=backsize*2; if ((fine_so_far) && (backsize == FlexSize(last))) { bnext = last; last = last-->BLK_PREV; bnext-->BLK_PREV = last; last-->BLK_NEXT = bnext; continue; } fine_so_far = false; ! From this point, "last" is meaningless backend = mto - backsize; backend->BLK_HEADER_N = n; backend-->BLK_HEADER_KOV = 0; backend-->BLK_HEADER_RCOUNT = 0; backend->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; backend-->BLK_NEXT = bnext; if (bnext ~= NULL) { bnext-->BLK_PREV = backend; bnext = backend; } } if (fine_so_far) rfalse; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Deallocation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexFree block fromtxb ptxb; if (block == 0) return; if ((block->BLK_HEADER_FLAGS) & BLK_FLAG_RESIDENT) return; if ((block->BLK_HEADER_N) & $80) return; ! not a flexible block at all if ((block->BLK_HEADER_FLAGS) & BLK_FLAG_MULTIPLE) { if (block-->BLK_PREV ~= NULL) (block-->BLK_PREV)-->BLK_NEXT = NULL; fromtxb = block; for (:(block-->BLK_NEXT)~=NULL:block = block-->BLK_NEXT) ; while (block ~= fromtxb) { ptxb = block-->BLK_PREV; FlexFreeSingleBlockInternal(block); block = ptxb; } } FlexFreeSingleBlockInternal(block); ]; [ FlexFreeSingleBlockInternal block free nx; block-->BLK_HEADER_KOV = 0; block-->BLK_HEADER_RCOUNT = 0; block->BLK_HEADER_FLAGS = BLK_FLAG_MULTIPLE; for (free = Flex_Heap:free ~= NULL:free = free-->BLK_NEXT) { nx = free-->BLK_NEXT; if (nx == NULL) { free-->BLK_NEXT = block; block-->BLK_PREV = free; block-->BLK_NEXT = NULL; FlexMergeInternal(block); return; } if (UnsignedCompare(nx, block) == 1) { free-->BLK_NEXT = block; block-->BLK_PREV = free; block-->BLK_NEXT = nx; nx-->BLK_PREV = block; FlexMergeInternal(block); return; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Resizing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexResize block req newsize dsize newblk kov n i otxb flags; if (block == 0) FlexError("failed resizing null block"); kov = block-->BLK_HEADER_KOV; flags = block->BLK_HEADER_FLAGS; if (flags & BLK_FLAG_MULTIPLE == 0) FlexError("failed resizing inextensible block"); otxb = block; newsize = req; for (:: block = block-->BLK_NEXT) { n = block->BLK_HEADER_N; for (dsize=1: n>0: n--) dsize = dsize*2; i = dsize - BLK_DATA_MULTI_OFFSET; newsize = newsize - i; if (newsize > 0) { if (block-->BLK_NEXT ~= NULL) continue; newblk = FlexAllocate(newsize, kov, flags); if (newblk == 0) rfalse; block-->BLK_NEXT = newblk; newblk-->BLK_PREV = block; return; } if (block-->BLK_NEXT ~= NULL) { FlexFree(block-->BLK_NEXT); block-->BLK_NEXT = NULL; } return; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Block Size ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexSize txb bsize n; ! Size of an individual block, including header if (txb == 0) return 0; for (bsize=1: nBLK_HEADER_N: bsize=bsize*2) n++; return bsize; ]; [ FlexTotalSize txb size_in_bytes; ! Combined size of multiple-blocks for a value if (txb == 0) return 0; if ((txb->BLK_HEADER_FLAGS) & BLK_FLAG_MULTIPLE == 0) return FlexSize(txb) - BLK_DATA_OFFSET; for (:txb~=NULL:txb=txb-->BLK_NEXT) { size_in_bytes = size_in_bytes + FlexSize(txb) - BLK_DATA_MULTI_OFFSET; } return size_in_bytes; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Flex.i6t: Debugging Routines ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ FlexDebug txb n k i bsize tot dtot kov; if (txb == 0) "Block never created."; kov = txb-->BLK_HEADER_KOV; print "Block ", txb, " (kov ", kov, "): "; for (:txb~=NULL:txb = txb-->BLK_NEXT) { if (k++ == 100) " ... and so on."; if (txb-->BLK_HEADER_KOV ~= kov) print "*Wrong kov=", txb-->BLK_HEADER_KOV, "* "; n = txb->BLK_HEADER_N; for (bsize=1:n>0:n--) bsize=bsize*2; i = bsize - BLK_DATA_OFFSET; dtot = dtot+i; tot = tot+bsize; print txb, "(", bsize, ") > "; } print dtot, " data in ", tot, " bytes^"; ]; [ FlexDebugDecomposition from to txb pf; if (to==0) to = NULL; for (txb=from:(txb~=to) && (txb~=NULL):txb=txb-->BLK_NEXT) { if (pf) print "+"; print FlexSize(txb); pf = true; } print "^"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Overview ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RC_INFINITY = MAX_POSITIVE_NUMBER; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Short Block Format ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant BLK_BVBITMAP = $ff; Constant BLK_BVBITMAP_LONGBLOCK = $10; ! Word 1 of SB is pointer to LB Constant BLK_BVBITMAP_TEXT = $20; ! BV holds a TEXT_TY value Constant BLK_BVBITMAP_CONSTANT = $40; ! BV holds a TEXT_TY value #IFTRUE WORDSIZE == 4; Constant BLK_BVBITMAP_LONGBLOCKMASK = $ffffff10; Constant BLK_BVBITMAP_TEXTMASK = $ffffff20; Constant BLK_BVBITMAP_CONSTANTMASK = $ffffff40; #IFNOT; Constant BLK_BVBITMAP_LONGBLOCKMASK = $ff10; Constant BLK_BVBITMAP_TEXTMASK = $ff20; Constant BLK_BVBITMAP_CONSTANTMASK = $ff40; #ENDIF; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Long Block Access ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueGetLongBlock bv o; if (bv) { o = bv-->0; if (o == 0) return bv + WORDSIZE; if (o & BLK_BVBITMAP == o) { if (o & BLK_BVBITMAP_LONGBLOCK) return bv-->1; return 0; } return o; } return bv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Weak Kind ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueWeakKind bv o; if (bv) { o = bv-->0; if (o == 0) return bv-->(BLK_HEADER_KOV+1); if (o & BLK_BVBITMAP == o) { if (o & BLK_BVBITMAP_TEXT) return TEXT_TY; o = bv-->1; } return o-->BLK_HEADER_KOV; } return NIL_TY; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Reference counting ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueGetRefCountPrimitive bv long_block; long_block = BlkValueGetLongBlock(bv); if (long_block) return long_block-->BLK_HEADER_RCOUNT; return RC_INFINITY; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Changing Reference Counts ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueIncRefCountPrimitive bv long_block refc; long_block = BlkValueGetLongBlock(bv); if (long_block) { refc = long_block-->BLK_HEADER_RCOUNT; if (refc < RC_INFINITY) long_block-->BLK_HEADER_RCOUNT = refc + 1; } ]; [ BlkValueDecRefCountPrimitive bv long_block refc; long_block = BlkValueGetLongBlock(bv); if (long_block) { refc = long_block-->BLK_HEADER_RCOUNT; if (refc < RC_INFINITY) { refc--; if (refc < 0) BlkValueError("reference count negative"); long_block-->BLK_HEADER_RCOUNT = refc; } return refc; } return RC_INFINITY; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Long Block Capacity ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueLBCapacity bv long_block array_size_in_bytes entry_size_in_bytes flags; long_block = BlkValueGetLongBlock(bv); if (long_block == 0) return 0; array_size_in_bytes = FlexTotalSize(long_block); flags = long_block->BLK_HEADER_FLAGS; entry_size_in_bytes = 1; if (flags & BLK_FLAG_16_BIT) entry_size_in_bytes = 2; else if (flags & BLK_FLAG_WORD) entry_size_in_bytes = WORDSIZE; return array_size_in_bytes / entry_size_in_bytes; ]; [ BlkValueSetLBCapacity bv new_capacity long_block flags entry_size_in_bytes; if (bv == 0) rfalse; BlkMakeMutable(bv); long_block = BlkValueGetLongBlock(bv); if (long_block == 0) rfalse; flags = long_block->BLK_HEADER_FLAGS; entry_size_in_bytes = 1; if (flags & BLK_FLAG_16_BIT) entry_size_in_bytes = 2; else if (flags & BLK_FLAG_WORD) entry_size_in_bytes = WORDSIZE; FlexResize(long_block, new_capacity*entry_size_in_bytes); rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Long Block Array Access ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueRead from pos do_not_indirect long_block chunk_size_in_bytes header_size_in_bytes flags entry_size_in_bytes seek_byte_position; if (from == 0) rfalse; if (do_not_indirect) long_block = from; else long_block = BlkValueGetLongBlock(from); flags = long_block->BLK_HEADER_FLAGS; entry_size_in_bytes = 1; if (flags & BLK_FLAG_16_BIT) entry_size_in_bytes = 2; else if (flags & BLK_FLAG_WORD) entry_size_in_bytes = WORDSIZE; if (flags & BLK_FLAG_MULTIPLE) header_size_in_bytes = BLK_DATA_MULTI_OFFSET; else header_size_in_bytes = BLK_DATA_OFFSET; seek_byte_position = pos*entry_size_in_bytes; for (: long_block~=NULL: long_block=long_block-->BLK_NEXT) { chunk_size_in_bytes = FlexSize(long_block) - header_size_in_bytes; if ((seek_byte_position >= 0) && (seek_byte_position0; 2: #Iftrue (WORDSIZE == 2); return long_block-->0; #ifnot; return (long_block->0)*256 + (long_block->1); #endif; 4: return long_block-->0; } } seek_byte_position = seek_byte_position - chunk_size_in_bytes; } "*** BlkValueRead: reading from index out of range: ", pos, " in ", from, " ***"; ]; [ BlkValueWrite to pos val do_not_indirect long_block chunk_size_in_bytes header_size_in_bytes flags entry_size_in_bytes seek_byte_position; if (to == 0) rfalse; if (do_not_indirect) long_block = to; else { BlkMakeMutable(to); long_block = BlkValueGetLongBlock(to); } flags = long_block->BLK_HEADER_FLAGS; entry_size_in_bytes = 1; if (flags & BLK_FLAG_16_BIT) entry_size_in_bytes = 2; else if (flags & BLK_FLAG_WORD) entry_size_in_bytes = WORDSIZE; if (flags & BLK_FLAG_MULTIPLE) header_size_in_bytes = BLK_DATA_MULTI_OFFSET; else header_size_in_bytes = BLK_DATA_OFFSET; seek_byte_position = pos*entry_size_in_bytes; for (:long_block~=NULL:long_block=long_block-->BLK_NEXT) { chunk_size_in_bytes = FlexSize(long_block) - header_size_in_bytes; if ((seek_byte_position >= 0) && (seek_byte_position0 = val; 2: #Iftrue (WORDSIZE == 2); long_block-->0 = val; #ifnot; long_block->0 = (val/256)%256; long_block->1 = val%256; #endif; 4: long_block-->0 = val; } return; } seek_byte_position = seek_byte_position - chunk_size_in_bytes; } "*** BlkValueWrite: writing to index out of range: ", pos, " in ", to, " ***"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: First Zero Entry ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueSeekZeroEntry from long_block chunk_size_in_bytes header_size_in_bytes flags entry_size_in_bytes byte_position addr from_addr to_addr; if (from == 0) return -1; long_block = BlkValueGetLongBlock(from); flags = long_block->BLK_HEADER_FLAGS; entry_size_in_bytes = 1; if (flags & BLK_FLAG_16_BIT) entry_size_in_bytes = 2; else if (flags & BLK_FLAG_WORD) entry_size_in_bytes = WORDSIZE; if (flags & BLK_FLAG_MULTIPLE) header_size_in_bytes = BLK_DATA_MULTI_OFFSET; else header_size_in_bytes = BLK_DATA_OFFSET; byte_position = 0; for (: long_block~=NULL: long_block=long_block-->BLK_NEXT) { chunk_size_in_bytes = FlexSize(long_block) - header_size_in_bytes; from_addr = long_block + header_size_in_bytes; to_addr = from_addr + chunk_size_in_bytes; switch(entry_size_in_bytes) { 1: for (addr = from_addr: addr < to_addr: addr++) if (addr->0 == 0) return byte_position + addr - from_addr; 2: #iftrue (WORDSIZE == 2); for (addr = from_addr: addr < to_addr: addr=addr+2) if (addr-->0 == 0) return (byte_position + addr - from_addr)/2; #ifnot; for (addr = from_addr: addr < to_addr: addr=addr+2) if ((addr->0 == 0) && (addr->1 == 0)) return (byte_position + addr - from_addr)/2; #endif; 4: for (addr = from_addr: addr < to_addr: addr=addr+4) if (addr-->0 == 0) return (byte_position + addr - from_addr)/4; } byte_position = byte_position + chunk_size_in_bytes; } return -1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Mass Copy Entries ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueMassCopyEntries to_bv from_bv no_entries_to_copy from_long_block from_addr from_bytes_left from_header_size_in_bytes to_long_block to_addr to_bytes_left to_header_size_in_bytes bytes_to_copy flags entry_size_in_bytes min; BlkMakeMutable(to_bv); from_long_block = BlkValueGetLongBlock(from_bv); to_long_block = BlkValueGetLongBlock(to_bv); flags = from_long_block->BLK_HEADER_FLAGS; entry_size_in_bytes = 1; if (flags & BLK_FLAG_16_BIT) entry_size_in_bytes = 2; else if (flags & BLK_FLAG_WORD) entry_size_in_bytes = WORDSIZE; if ((flags & (BLK_FLAG_MULTIPLE + BLK_FLAG_TRUNCMULT)) && (BlkValueSetLBCapacity(to_bv, no_entries_to_copy) == false)) BlkValueError("copy resizing failed"); if (flags & BLK_FLAG_MULTIPLE) from_header_size_in_bytes = BLK_DATA_MULTI_OFFSET; else from_header_size_in_bytes = BLK_DATA_OFFSET; flags = to_long_block->BLK_HEADER_FLAGS; if (flags & BLK_FLAG_MULTIPLE) to_header_size_in_bytes = BLK_DATA_MULTI_OFFSET; else to_header_size_in_bytes = BLK_DATA_OFFSET; from_addr = from_long_block + from_header_size_in_bytes; from_bytes_left = FlexSize(from_long_block) - from_header_size_in_bytes; to_addr = to_long_block + to_header_size_in_bytes; to_bytes_left = FlexSize(to_long_block) - to_header_size_in_bytes; bytes_to_copy = entry_size_in_bytes*no_entries_to_copy; while (true) { if (from_bytes_left == 0) { from_long_block = from_long_block-->BLK_NEXT; if (from_long_block == 0) BlkValueError("copy destination exhausted"); from_addr = from_long_block + from_header_size_in_bytes; from_bytes_left = FlexSize(from_long_block) - from_header_size_in_bytes; } else if (to_bytes_left == 0) { to_long_block = to_long_block-->BLK_NEXT; if (to_long_block == 0) BlkValueError("copy source exhausted"); to_addr = to_long_block + to_header_size_in_bytes; to_bytes_left = FlexSize(to_long_block) - to_header_size_in_bytes; } else { min = from_bytes_left; if (to_bytes_left < min) min = to_bytes_left; if (bytes_to_copy <= min) { Memcpy(to_addr, from_addr, bytes_to_copy); return; } Memcpy(to_addr, from_addr, min); bytes_to_copy = bytes_to_copy - min; from_addr = from_addr + min; from_bytes_left = from_bytes_left - min; to_addr = to_addr + min; to_bytes_left = to_bytes_left - min; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Mass Copy From Array ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueMassCopyFromArray to_bv from_array from_entry_size no_entries_to_copy to_long_block to_addr to_entries_left to_header_size to_entry_size flags; BlkMakeMutable(to_bv); to_long_block = BlkValueGetLongBlock(to_bv); flags = to_long_block->BLK_HEADER_FLAGS; to_entry_size = 1; if (flags & BLK_FLAG_16_BIT) to_entry_size = 2; else if (flags & BLK_FLAG_WORD) to_entry_size = WORDSIZE; if ((flags & (BLK_FLAG_MULTIPLE + BLK_FLAG_TRUNCMULT)) && (BlkValueSetLBCapacity(to_bv, no_entries_to_copy) == false)) BlkValueError("copy resizing failed"); if (flags & BLK_FLAG_MULTIPLE) to_header_size = BLK_DATA_MULTI_OFFSET; else to_header_size = BLK_DATA_OFFSET; to_addr = to_long_block + to_header_size; to_entries_left = (FlexSize(to_long_block) - to_header_size)/to_entry_size; while (no_entries_to_copy > to_entries_left) { Arrcpy(to_addr, to_entry_size, from_array, from_entry_size, to_entries_left); no_entries_to_copy = no_entries_to_copy - to_entries_left; from_array = from_array + to_entries_left*from_entry_size; to_long_block = to_long_block-->BLK_NEXT; if (to_long_block == 0) BlkValueError("copy source exhausted"); to_addr = to_long_block + to_header_size; to_entries_left = (FlexSize(to_long_block) - to_header_size)/to_entry_size; } if (no_entries_to_copy > 0) { Arrcpy(to_addr, to_entry_size, from_array, from_entry_size, no_entries_to_copy); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: KOVS Routines ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant CREATE_KOVS = 1; Constant CAST_KOVS = 2; Constant DESTROY_KOVS = 3; Constant MAKEMUTABLE_KOVS = 4; Constant COPYKIND_KOVS = 5; Constant EXTENT_KOVS = 6; Constant COPYQUICK_KOVS = 7; Constant COPYSB_KOVS = 8; Constant KINDDATA_KOVS = 9; Constant COPY_KOVS = 10; Constant COMPARE_KOVS = 11; Constant READ_FILE_KOVS = 12; Constant WRITE_FILE_KOVS = 13; Constant HASH_KOVS = 14; Constant DEBUG_KOVS = 15; ! Constant BLKVALUE_TRACE; ! Uncomment this to expose masses of tracery ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Creation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueCreate strong_kind short_block kovs; kovs = KOVSupportFunction(strong_kind, "impossible allocation"); short_block = kovs(CREATE_KOVS, strong_kind, short_block); #ifdef BLKVALUE_TRACE; print "Created: ", (BlkValueDebug) short_block, "^"; #endif; ! The new value is represented in I6 as the pointer to its short block: return short_block; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Errors ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueError reason; print "*** Value handling failed: ", (string) reason, " ***^"; RunTimeProblem(RTP_HEAPERROR); @quit; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Short Block Allocation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueCreateSB1 short_block val; if (short_block == 0) short_block = FlexAllocate(WORDSIZE, 0, BLK_FLAG_WORD) + BLK_DATA_OFFSET; short_block-->0 = val; return short_block; ]; [ BlkValueCreateSB2 short_block val1 val2; if (short_block == 0) short_block = FlexAllocate(2*WORDSIZE, 0, BLK_FLAG_WORD) + BLK_DATA_OFFSET; short_block-->0 = val1; short_block-->1 = val2; return short_block; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Block Values On Stack ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ StackFramingInitialise; I7SFRAME = blockv_stack + WORDSIZE*BLOCKV_STACK_SIZE; ]; [ StackFrameCreate size new; new = I7SFRAME - WORDSIZE*size; if (new < blockv_stack) { RunTimeProblem(RTP_HEAPERROR); @quit; } I7SFRAME = new; ]; [ BlkValueCreateOnStack offset strong_kind; BlkValueCreate(strong_kind, I7SFRAME + WORDSIZE*offset); ]; [ BlkValueFreeOnStack offset; BlkValueFree(I7SFRAME + WORDSIZE*offset); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Freeing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueFree bv kovs d; if (bv == 0) return; ! Dispose of any data in the long block kovs = KOVSupportFunction(BlkValueWeakKind(bv), "impossible deallocation"); BlkValueDestroyPrimitive(bv, kovs); ! Free any heap memory occupied by the short block d = bv - Flex_Heap; if ((d >= 0) && (d < MEMORY_HEAP_SIZE + 16)) FlexFree(bv - BLK_DATA_OFFSET); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Quick Copy ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueQuickCopyPrimitive to_bv from_bv kovs; BlkValueDestroyPrimitive(to_bv, kovs); kovs(COPYSB_KOVS, to_bv, from_bv); BlkValueIncRefCountPrimitive(from_bv); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Short Block Copy ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueCopySB1 to_bv from_bv; to_bv-->0 = from_bv-->0; if (to_bv-->0 == 0) to_bv-->0 = from_bv + WORDSIZE; ]; [ BlkValueCopySB2 to_bv from_bv; to_bv-->0 = from_bv-->0; to_bv-->1 = from_bv-->1; if (to_bv-->1 == 0) to_bv-->1 = from_bv + 2*WORDSIZE; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Slow Copy ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueSlowCopyPrimitive to_bv from_bv kovs recycling k from_long_block no_entries_to_copy; k = kovs(KINDDATA_KOVS, to_bv, from_bv); from_long_block = BlkValueGetLongBlock(from_bv); if (from_long_block) { if (recycling) BlkValueRecyclePrimitive(to_bv, kovs); no_entries_to_copy = kovs(EXTENT_KOVS, from_bv); if (no_entries_to_copy == -1) no_entries_to_copy = BlkValueLBCapacity(from_bv); BlkValueMassCopyEntries(to_bv, from_bv, no_entries_to_copy); !print "So to: "; BlkValueDebug(to_bv); print "^"; } kovs(COPY_KOVS, to_bv, from_bv, k); !print "Whence to: "; BlkValueDebug(to_bv); print "^"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Copy ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueCopy to_bv from_bv to_kind from_kind kovs; if (to_bv == 0) BlkValueError("copy to null value"); if (from_bv == 0) BlkValueError("copy from null value"); if (to_bv == from_bv) return; #ifdef BLKVALUE_TRACE; print "Copy: ", (BlkValueDebug) to_bv, " to equal ", (BlkValueDebug) from_bv, "^"; #endif; to_kind = BlkValueWeakKind(to_bv); from_kind = BlkValueWeakKind(from_bv); if (to_kind ~= from_kind) BlkValueError("copy incompatible kinds"); kovs = KOVSupportFunction(to_kind, "impossible copy"); if (kovs(COPYQUICK_KOVS, to_bv, from_bv)) BlkValueQuickCopyPrimitive(to_bv, from_bv, kovs); else BlkValueSlowCopyPrimitive(to_bv, from_bv, kovs, true); return to_bv; ]; [ BlkValueCopyAZ to_bv from_bv; if (from_bv) return BlkValueCopy(to_bv, from_bv); return to_bv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Destruction ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueDestroyPrimitive bv kovs long_block; #ifdef BLKVALUE_TRACE; print "Destroying ", (BlkValueDebug) bv, "^"; #endif; if (BlkValueDecRefCountPrimitive(bv) == 0) { kovs(DESTROY_KOVS, bv); long_block = BlkValueGetLongBlock(bv); if (long_block) FlexFree(long_block); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Recycling ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueRecyclePrimitive bv kovs; #ifdef BLKVALUE_TRACE; print "Recycling ", (BlkValueDebug) bv, "^"; #endif; if (BlkValueDecRefCountPrimitive(bv) == 0) { kovs(DESTROY_KOVS, bv); BlkValueIncRefCountPrimitive(bv); } else { BlkValueCreate(BlkValueWeakKind(bv), bv); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Mutability ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkMakeMutable bv block bv_kind kovs sb_size; if (bv == 0) BlkValueError("tried to make null block mutable"); if (BlkValueGetRefCountPrimitive(bv) > 1) { #ifdef BLKVALUE_TRACE; print "Make mutable: ", (BlkValueDebug) bv, "^"; #endif; BlkValueDecRefCountPrimitive(bv); bv_kind = BlkValueWeakKind(bv); kovs = KOVSupportFunction(bv_kind, "impossible mutability"); sb_size = kovs(MAKEMUTABLE_KOVS, bv); if (sb_size > 0) { @push I7SFRAME; StackFrameCreate(sb_size); BlkValueCreateOnStack(0, bv_kind); kovs(COPYKIND_KOVS, I7SFRAME, bv); BlkValueSlowCopyPrimitive(I7SFRAME, bv, kovs, false); kovs(COPYSB_KOVS, bv, I7SFRAME); @pull I7SFRAME; } } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Casting ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueCast to_bv original_kind original_value kovs; kovs = KOVSupportFunction(BlkValueWeakKind(to_bv), "impossible cast"); kovs(CAST_KOVS, to_bv, original_kind, original_value); return to_bv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Comparison ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueCompare bv_left bv_right kind_left kind_right kovs; if ((bv_left == 0) && (bv_right == 0)) return 0; if (bv_left == 0) return 1; if (bv_right == 0) return -1; kind_left = BlkValueWeakKind(bv_left); kind_right = BlkValueWeakKind(bv_right); if (kind_left ~= kind_right) return kind_left - kind_right; kovs = KOVSupportFunction(kind_left, "impossible comparison"); return kovs(COMPARE_KOVS, bv_left, bv_right); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Hashing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ GetHashValue kind value; if (KOVIsBlockValue(kind)) return BlkValueHash(value); return value; ]; [ BlkValueHash bv bv_kind kovs; if (bv == 0) return 0; bv_kind = BlkValueWeakKind(bv); kovs = KOVSupportFunction(bv_kind, "impossible hashing"); return kovs(HASH_KOVS, bv); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Serialisation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueReadFromFile bv auxf ch bv_kind kovs; kovs = KOVSupportFunction(bv_kind); if (kovs) return kovs(READ_FILE_KOVS, bv, auxf, ch); rfalse; ]; [ BlkValueWriteToFile bv bv_kind kovs; kovs = KOVSupportFunction(bv_kind); if (kovs) return kovs(WRITE_FILE_KOVS, bv); rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Debugging ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkValueDebug bv flag refc long_block kovs; print "(BV"; if (bv) { BlkDebugAddress(bv, flag); long_block = BlkValueGetLongBlock(bv); if (long_block) { if (bv-->0 == 0) print "..."; else print "-->"; print "L"; BlkDebugAddress(long_block, flag); print " 2**", long_block->BLK_HEADER_N; refc = BlkValueGetRefCountPrimitive(bv); if (refc == RC_INFINITY) print " resident"; else { print " ", refc, " ref"; if (refc ~= 1) print "s"; } } kovs = KOVSupportFunction(BlkValueWeakKind(bv)); if (kovs) kovs(DEBUG_KOVS, bv); } print ")"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Printing Memory Addresses ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkDebugAddress addr flag d; if (flag) { print "###"; return; } d = addr - blockv_stack; if ((d >= 0) && (d <= WORDSIZE*BLOCKV_STACK_SIZE)) { print "s+", (BlkPrintHexadecimal) d; d = addr - I7SFRAME; print "=f"; if (d >= 0) print "+"; print d; return; } d = addr - Flex_Heap; if ((d >= 0) && (d < MEMORY_HEAP_SIZE + 16)) { print "h+", (BlkPrintHexadecimal) d; return; } print (BlkPrintHexadecimal) addr; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! BlockValues.i6t: Hexadecimal Printing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ BlkPrintHexadecimal v; #iftrue WORDSIZE == 4; if (v & $ffff0000) { if (v & $ff000000) { BlkPrintHexDigit(v / $10000000); BlkPrintHexDigit(v / $1000000); } BlkPrintHexDigit(v / $100000); BlkPrintHexDigit(v / $10000); } #endif; BlkPrintHexDigit(v / $1000); BlkPrintHexDigit(v / $100); BlkPrintHexDigit(v / $10); BlkPrintHexDigit(v); ]; [ BlkPrintHexDigit v; v = v & $F; if (v < 10) print v; else print (char) 'A' + v - 10; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Block Format ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant CONSTANT_PACKED_TEXT_STORAGE = BLK_BVBITMAP_TEXT + BLK_BVBITMAP_CONSTANT + 1; Constant CONSTANT_PERISHABLE_TEXT_STORAGE = BLK_BVBITMAP_TEXT + BLK_BVBITMAP_CONSTANT + 2; Constant PACKED_TEXT_STORAGE = BLK_BVBITMAP_TEXT + 3; Constant UNPACKED_TEXT_STORAGE = BLK_BVBITMAP_TEXT + BLK_BVBITMAP_LONGBLOCK + 4; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Extent Of Long Block ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Extent arg1 x; x = BlkValueSeekZeroEntry(arg1); if (x < 0) return -1; ! should not happen, of course return x+1; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Character Set ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF TARGET_ZCODE; Constant TEXT_TY_Storage_Flags = BLK_FLAG_MULTIPLE; Constant ZSCII_Tables; #IFNOT; Constant TEXT_TY_Storage_Flags = BLK_FLAG_MULTIPLE + BLK_FLAG_16_BIT; Constant Large_Unicode_Tables; #ENDIF; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! UnicodeData.i6t: Source ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant UNIC_NCT = 10000; ! Safe as highest case-change delta is 8383 ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! UnicodeData.i6t: ZSCII Casing Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF ZSCII_Tables; Array CharCasingChart0 --> $0061 ( 26) ( -32) $009b ( 3) ( 3) $00a1 ( 1) (UNIC_NCT) $00a4 ( 2) ( 3) $00a6 ( 1) (UNIC_NCT) $00a9 ( 6) ( 6) $00b5 ( 5) ( 5) $00bf ( 5) ( 5) $00c9 ( -3) ( 1) $00cd ( 3) ( 3) $00d3 ( -3) ( 1) $00d7 ( 2) ( 2) $00dc ( 1) ( 1) $0000 ; Array CharCasingChart1 --> $0041 ( 26) ( 32) $009e ( 3) ( -3) $00a7 ( 2) ( -3) $00af ( 6) ( -6) $00ba ( 5) ( -5) $00c4 ( 5) ( -5) $00ca ( -3) ( -1) $00d0 ( 3) ( -3) $00d4 ( -3) ( -1) $00d9 ( 2) ( -2) $00dd ( 1) ( -1) $0000 ; #ENDIF; ! ZSCII_Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! UnicodeData.i6t: Small Unicode Casing Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF Small_Unicode_Tables; Array CharCasingChart0 --> $0061 ( 26) ( -32) $00aa ( 1) (UNIC_NCT) $00b5 ( 1) (UNIC_NCT) $00ba ( 1) (UNIC_NCT) $00df ( 1) (UNIC_NCT) $00e0 ( 23) ( -32) $00f8 ( 7) ( -32) $00ff ( 1) (UNIC_NCT) $0000 ; Array CharCasingChart1 --> $0041 ( 26) ( 32) $00c0 ( 23) ( 32) $00d8 ( 7) ( 32) $0000 ; #ENDIF; ! Small_Unicode_Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! UnicodeData.i6t: Large Unicode Casing Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF Large_Unicode_Tables; Array CharCasingChart0 --> $0061 ( 26) ( -32) $00aa ( 1) (UNIC_NCT) $00b5 ( 1) ( 743) $00ba ( 1) (UNIC_NCT) $00df ( 1) (UNIC_NCT) $00e0 ( 23) ( -32) $00f8 ( 7) ( -32) $00ff ( 1) ( 121) $0101 ( -47) ( -1) $0131 ( 1) ( -232) $0133 ( -5) ( -1) $0138 ( 1) (UNIC_NCT) $013a ( -15) ( -1) $0149 ( 1) (UNIC_NCT) $014b ( -45) ( -1) $017a ( -5) ( -1) $017f ( 1) ( -300) $0180 ( 1) (UNIC_NCT) $0183 ( -3) ( -1) $0188 ( 1) ( -1) $018c ( 1) ( -1) $018d ( 1) (UNIC_NCT) $0192 ( 1) ( -1) $0195 ( 1) ( 97) $0199 ( 1) ( -1) $019a ( 2) (UNIC_NCT) $019e ( 1) ( 130) $01a1 ( -5) ( -1) $01a8 ( 1) ( -1) $01aa ( 2) (UNIC_NCT) $01ad ( 1) ( -1) $01b0 ( 1) ( -1) $01b4 ( -3) ( -1) $01b9 ( 1) ( -1) $01ba ( 1) (UNIC_NCT) $01bd ( 1) ( -1) $01be ( 1) (UNIC_NCT) $01bf ( 1) ( 56) $01c6 ( 1) ( -2) $01c9 ( 1) ( -2) $01cc ( 1) ( -2) $01ce ( -15) ( -1) $01dd ( 1) ( -79) $01df ( -17) ( -1) $01f0 ( 1) (UNIC_NCT) $01f3 ( 1) ( -2) $01f5 ( 1) ( -1) $01f9 ( -39) ( -1) $0221 ( 1) (UNIC_NCT) $0223 ( -17) ( -1) $0234 ( 3) (UNIC_NCT) $0250 ( 3) (UNIC_NCT) $0253 ( 1) ( -210) $0254 ( 1) ( -206) $0255 ( 1) (UNIC_NCT) $0256 ( 2) ( -205) $0258 ( 1) (UNIC_NCT) $0259 ( 1) ( -202) $025a ( 1) (UNIC_NCT) $025b ( 1) ( -203) $025c ( 4) (UNIC_NCT) $0260 ( 1) ( -205) $0261 ( 2) (UNIC_NCT) $0263 ( 1) ( -207) $0264 ( 4) (UNIC_NCT) $0268 ( 1) ( -209) $0269 ( 1) ( -211) $026a ( 5) (UNIC_NCT) $026f ( 1) ( -211) $0270 ( 2) (UNIC_NCT) $0272 ( 1) ( -213) $0273 ( 2) (UNIC_NCT) $0275 ( 1) ( -214) $0276 ( 10) (UNIC_NCT) $0280 ( 1) ( -218) $0281 ( 2) (UNIC_NCT) $0283 ( 1) ( -218) $0284 ( 4) (UNIC_NCT) $0288 ( 1) ( -218) $0289 ( 1) (UNIC_NCT) $028a ( 2) ( -217) $028c ( 6) (UNIC_NCT) $0292 ( 1) ( -219) $0293 ( 29) (UNIC_NCT) $0390 ( 1) (UNIC_NCT) $03ac ( 1) ( -38) $03ad ( 3) ( -37) $03b0 ( 1) (UNIC_NCT) $03b1 ( 17) ( -32) $03c2 ( 1) ( -31) $03c3 ( 9) ( -32) $03cc ( 1) ( -64) $03cd ( 2) ( -63) $03d0 ( 1) ( -62) $03d1 ( 1) ( -57) $03d5 ( 1) ( -47) $03d6 ( 1) ( -54) $03d7 ( 1) (UNIC_NCT) $03d9 ( -23) ( -1) $03f0 ( 1) ( -86) $03f1 ( 1) ( -80) $03f2 ( 1) ( 7) $03f3 ( 1) (UNIC_NCT) $03f5 ( 1) ( -96) $03f8 ( 1) ( -1) $03fb ( 1) ( -1) $0430 ( 32) ( -32) $0450 ( 16) ( -80) $0461 ( -33) ( -1) $048b ( -53) ( -1) $04c2 ( -13) ( -1) $04d1 ( -37) ( -1) $04f9 ( 1) ( -1) $0501 ( -15) ( -1) $0561 ( 38) ( -48) $0587 ( 1) (UNIC_NCT) $1d00 ( 44) (UNIC_NCT) $1d62 ( 10) (UNIC_NCT) $1e01 (-149) ( -1) $1e96 ( 5) (UNIC_NCT) $1e9b ( 1) ( -59) $1ea1 ( -89) ( -1) $1f00 ( 8) ( 8) $1f10 ( 6) ( 8) $1f20 ( 8) ( 8) $1f30 ( 8) ( 8) $1f40 ( 6) ( 8) $1f50 ( 1) (UNIC_NCT) $1f51 ( 1) ( 8) $1f52 ( 1) (UNIC_NCT) $1f53 ( 1) ( 8) $1f54 ( 1) (UNIC_NCT) $1f55 ( 1) ( 8) $1f56 ( 1) (UNIC_NCT) $1f57 ( 1) ( 8) $1f60 ( 8) ( 8) $1f70 ( 2) ( 74) $1f72 ( 4) ( 86) $1f76 ( 2) ( 100) $1f78 ( 2) ( 128) $1f7a ( 2) ( 112) $1f7c ( 2) ( 126) $1f80 ( 8) ( 8) $1f90 ( 8) ( 8) $1fa0 ( 8) ( 8) $1fb0 ( 2) ( 8) $1fb2 ( 1) (UNIC_NCT) $1fb3 ( 1) ( 9) $1fb4 ( -3) (UNIC_NCT) $1fb7 ( 1) (UNIC_NCT) $1fbe ( 1) ( -7205) $1fc2 ( 1) (UNIC_NCT) $1fc3 ( 1) ( 9) $1fc4 ( -3) (UNIC_NCT) $1fc7 ( 1) (UNIC_NCT) $1fd0 ( 2) ( 8) $1fd2 ( 2) (UNIC_NCT) $1fd6 ( 2) (UNIC_NCT) $1fe0 ( 2) ( 8) $1fe2 ( 3) (UNIC_NCT) $1fe5 ( 1) ( 7) $1fe6 ( 2) (UNIC_NCT) $1ff2 ( 1) (UNIC_NCT) $1ff3 ( 1) ( 9) $1ff4 ( -3) (UNIC_NCT) $1ff7 ( 1) (UNIC_NCT) $2071 ( 1) (UNIC_NCT) $207f ( 1) (UNIC_NCT) $210a ( 1) (UNIC_NCT) $210e ( 2) (UNIC_NCT) $2113 ( 1) (UNIC_NCT) $212f ( 1) (UNIC_NCT) $2134 ( 1) (UNIC_NCT) $2139 ( 1) (UNIC_NCT) $213d ( 1) (UNIC_NCT) $2146 ( 4) (UNIC_NCT) $fb00 ( 7) (UNIC_NCT) $fb13 ( 5) (UNIC_NCT) $ff41 ( 26) ( -32) $0000 ; Array CharCasingChart1 --> $0041 ( 26) ( 32) $00c0 ( 23) ( 32) $00d8 ( 7) ( 32) $0100 ( -47) ( 1) $0130 ( 1) ( -199) $0132 ( -5) ( 1) $0139 ( -15) ( 1) $014a ( -45) ( 1) $0178 ( 1) ( -121) $0179 ( -5) ( 1) $0181 ( 1) ( 210) $0182 ( -3) ( 1) $0186 ( 1) ( 206) $0187 ( 1) ( 1) $0189 ( 2) ( 205) $018b ( 1) ( 1) $018e ( 1) ( 79) $018f ( 1) ( 202) $0190 ( 1) ( 203) $0191 ( 1) ( 1) $0193 ( 1) ( 205) $0194 ( 1) ( 207) $0196 ( 1) ( 211) $0197 ( 1) ( 209) $0198 ( 1) ( 1) $019c ( 1) ( 211) $019d ( 1) ( 213) $019f ( 1) ( 214) $01a0 ( -5) ( 1) $01a6 ( 1) ( 218) $01a7 ( 1) ( 1) $01a9 ( 1) ( 218) $01ac ( 1) ( 1) $01ae ( 1) ( 218) $01af ( 1) ( 1) $01b1 ( 2) ( 217) $01b3 ( -3) ( 1) $01b7 ( 1) ( 219) $01b8 ( 1) ( 1) $01bc ( 1) ( 1) $01c4 ( 1) ( 2) $01c7 ( 1) ( 2) $01ca ( 1) ( 2) $01cd ( -15) ( 1) $01de ( -17) ( 1) $01f1 ( 1) ( 2) $01f4 ( 1) ( 1) $01f6 ( 1) ( -97) $01f7 ( 1) ( -56) $01f8 ( -39) ( 1) $0220 ( 1) ( -130) $0222 ( -17) ( 1) $0386 ( 1) ( 38) $0388 ( 3) ( 37) $038c ( 1) ( 64) $038e ( 2) ( 63) $0391 ( 17) ( 32) $03a3 ( 9) ( 32) $03d2 ( 3) (UNIC_NCT) $03d8 ( -23) ( 1) $03f4 ( 1) ( -60) $03f7 ( 1) ( 1) $03f9 ( 1) ( -7) $03fa ( 1) ( 1) $0400 ( 16) ( 80) $0410 ( 32) ( 32) $0460 ( -33) ( 1) $048a ( -53) ( 1) $04c0 ( 1) (UNIC_NCT) $04c1 ( -13) ( 1) $04d0 ( -37) ( 1) $04f8 ( 1) ( 1) $0500 ( -15) ( 1) $0531 ( 38) ( 48) $10a0 ( 38) (UNIC_NCT) $1e00 (-149) ( 1) $1ea0 ( -89) ( 1) $1f08 ( 8) ( -8) $1f18 ( 6) ( -8) $1f28 ( 8) ( -8) $1f38 ( 8) ( -8) $1f48 ( 6) ( -8) $1f59 ( -7) ( -8) $1f68 ( 8) ( -8) $1fb8 ( 2) ( -8) $1fba ( 2) ( -74) $1fc8 ( 4) ( -86) $1fd8 ( 2) ( -8) $1fda ( 2) ( -100) $1fe8 ( 2) ( -8) $1fea ( 2) ( -112) $1fec ( 1) ( -7) $1ff8 ( 2) ( -128) $1ffa ( 2) ( -126) $2102 ( 1) (UNIC_NCT) $2107 ( 1) (UNIC_NCT) $210b ( 3) (UNIC_NCT) $2110 ( 3) (UNIC_NCT) $2115 ( 1) (UNIC_NCT) $2119 ( 5) (UNIC_NCT) $2124 ( 1) (UNIC_NCT) $2126 ( 1) ( -7517) $2128 ( 1) (UNIC_NCT) $212a ( 1) ( -8383) $212b ( 1) ( -8262) $212c ( 2) (UNIC_NCT) $2130 ( 2) (UNIC_NCT) $2133 ( 1) (UNIC_NCT) $213e ( 2) (UNIC_NCT) $2145 ( 1) (UNIC_NCT) $ff21 ( 26) ( 32) $0000 ; #ENDIF; ! Large_Unicode_Tables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Char.i6t: Char Is Of Case ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CharIsOfCase c case i tab min max len par; if (c<'A') rfalse; if (case == 0) { if ((c >= 'a') && (c <= 'z')) rtrue; tab = CharCasingChart0; } else { if ((c >= 'A') && (c <= 'Z')) rtrue; tab = CharCasingChart1; } if (c<128) rfalse; while (tab-->i) { min = tab-->i; i++; len = tab-->i; i++; i++; par = 0; if (len<0) { par = 1; len = -len; } if (c < min) rfalse; if (c < min+len) { if (par) { if ((c-min) % 2 == 0) rtrue; } else { rtrue; } } } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Char.i6t: Char To Case ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CharToCase c case i tab min max len par del f; if (c<'A') return c; if (case == 1) { if ((c >= 'a') && (c <= 'z')) return c-32; tab = CharCasingChart0; } else { if ((c >= 'A') && (c <= 'Z')) return c+32; tab = CharCasingChart1; } if (c<128) return c; while (tab-->i) { min = tab-->i; i++; len = tab-->i; i++; del = tab-->i; i++; par = 0; if (len<0) { par = 1; len = -len; } if (c < min) return c; if (c < min+len) { f = false; if (par) { if ((c-min) % 2 == 0) f = true; } else { f = true; } if (f) { if (del == UNIC_NCT) return c; return c+del; } } } return c; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Char.i6t: Reversing Case ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #IFDEF TARGET_ZCODE; [ TEXT_TY_RevCase ch; if (ch<'A') return ch; if ((ch >= 'a') && (ch <= 'z')) return ch-'a'+'A'; if ((ch >= 'A') && (ch <= 'Z')) return ch-'A'+'a'; if (ch<128) return ch; if ((ch >= 155) && (ch <= 157)) return ch+3; ! a, o, u umlaut in ZSCII if ((ch >= 158) && (ch <= 160)) return ch-3; ! A, O, U umlaut if ((ch >= 164) && (ch <= 165)) return ch+3; ! e, i umlaut if ((ch >= 167) && (ch <= 168)) return ch-3; ! E, I umlaut if ((ch >= 169) && (ch <= 174)) return ch+6; ! a, e, i, o, u, y acute if ((ch >= 175) && (ch <= 180)) return ch-6; ! A, E, I, O, U, Y acute if ((ch >= 181) && (ch <= 185)) return ch+5; ! a, e, i, o, u grave if ((ch >= 186) && (ch <= 190)) return ch-5; ! A, E, I, O, U grave if ((ch >= 191) && (ch <= 195)) return ch+5; ! a, e, i, o, u circumflex if ((ch >= 196) && (ch <= 200)) return ch-5; ! A, E, I, O, U circumflex if (ch == 201) return 202; ! a circle if (ch == 202) return 201; ! A circle if (ch == 203) return 204; ! o slash if (ch == 204) return 203; ! O slash if ((ch >= 205) && (ch <= 207)) return ch+3; ! a, n, o tilde if ((ch >= 208) && (ch <= 210)) return ch-3; ! A, N, O tilde if (ch == 211) return 212; ! ae ligature if (ch == 212) return 211; ! AE ligature if (ch == 213) return 214; ! c cedilla if (ch == 214) return 213; ! C cedilla if (ch == 215 or 216) return ch+2; ! thorn, eth if (ch == 217 or 218) return ch-2; ! Thorn, Eth if (ch == 220) return 221; ! oe ligature if (ch == 221) return 220; ! OE ligature return ch; ]; #IFNOT; [ TEXT_TY_RevCase ch; if (ch<'A') return ch; if ((ch >= 'a') && (ch <= 'z')) return ch-'a'+'A'; if ((ch >= 'A') && (ch <= 'Z')) return ch-'A'+'a'; if (ch<128) return ch; if (CharIsOfCase(ch, 0)) return CharToCase(ch, 1); if (CharIsOfCase(ch, 1)) return CharToCase(ch, 0); return ch; ]; #ENDIF; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Char.i6t: Testing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ CharTestCases case i j; for (i=32: i<$E0; i++) { if ((i>=127) && (i<155)) continue; print i, " - ", (char) i, " -"; if (CharIsOfCase(i, 0)) print " lower"; if (CharIsOfCase(i, 1)) print " upper"; j = CharToCase(i, 0); if (j ~= i) print " tolower: ", (char) j; j = CharToCase(i, 1); if (j ~= i) print " toupper: ", (char) j; print "^"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: KOV Support ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: return TEXT_TY_Create(arg2); CAST_KOVS: TEXT_TY_Cast(arg1, arg2, arg3); MAKEMUTABLE_KOVS: return TEXT_TY_Mutable(arg1); COPYQUICK_KOVS: rtrue; COPYSB_KOVS: TEXT_TY_CopySB(arg1, arg2); KINDDATA_KOVS: return 0; EXTENT_KOVS: return TEXT_TY_Extent(arg1); COMPARE_KOVS: return TEXT_TY_Compare(arg1, arg2); READ_FILE_KOVS: if (arg3 == -1) rtrue; return TEXT_TY_ReadFile(arg1, arg2, arg3); WRITE_FILE_KOVS: return TEXT_TY_WriteFile(arg1); HASH_KOVS: return TEXT_TY_Hash(arg1); DEBUG_KOVS: TEXT_TY_Debug(arg1); } ! We choose not to respond to: DESTROY_KOVS, COPYKIND_KOVS, COPY_KOVS rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Debugging ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Debug txt; switch (txt-->0) { CONSTANT_PACKED_TEXT_STORAGE: print " = cp~", (PrintI6Text) txt-->1, "~"; CONSTANT_PERISHABLE_TEXT_STORAGE: print " = cp~", (PrintI6Text) txt-->1, "~"; PACKED_TEXT_STORAGE: print " = p~", (PrintI6Text) txt-->1, "~"; UNPACKED_TEXT_STORAGE: print " = ~", (TEXT_TY_Say) txt, "~"; default: print " broken?"; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Creation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Create short_block x; return BlkValueCreateSB2(short_block, PACKED_TEXT_STORAGE, EMPTY_TEXT_PACKED); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Copy Short Block ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_CopySB to_bv from_bv; BlkValueCopySB2(to_bv, from_bv); if (to_bv-->0 & BLK_BVBITMAP_CONSTANTMASK) to_bv-->0 = PACKED_TEXT_STORAGE; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Transmutation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Transmute txt; TEXT_TY_Temporarily_Transmute(txt); ]; [ TEXT_TY_Temporarily_Transmute txt x; if ((txt) && (txt-->0 & BLK_BVBITMAP_LONGBLOCKMASK == 0)) { x = txt-->1; ! The old value was a packed string txt-->0 = UNPACKED_TEXT_STORAGE; txt-->1 = FlexAllocate(32, TEXT_TY, TEXT_TY_Storage_Flags); if (x ~= EMPTY_TEXT_PACKED) TEXT_TY_CastPrimitive(txt, false, x); return x; } return 0; ]; [ TEXT_TY_Untransmute txt pk cp x; if ((pk) && (txt-->0 == UNPACKED_TEXT_STORAGE)) { x = txt-->1; ! The old value was an unpacked string FlexFree(x); txt-->0 = cp; txt-->1 = pk; ! The value earlier returned by TEXT_TY_Temporarily_Transmute } return txt; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Mutability ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Mutable txt; if (txt-->0 & BLK_BVBITMAP_LONGBLOCKMASK == 0) { TEXT_TY_Transmute(txt); return 0; } return 2; ! Tell BlockValue there's a long block pointer ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Casting ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Cast to_txt from_kind from_value; if (from_kind == TEXT_TY) { BlkValueCopy(to_txt, from_value); } else if (from_kind == SNIPPET_TY) { TEXT_TY_Transmute(to_txt); TEXT_TY_CastPrimitive(to_txt, true, from_value); } else BlkValueError("impossible cast to text"); ]; [ SNIPPET_TY_to_TEXT_TY to_txt snippet; return BlkValueCast(to_txt, SNIPPET_TY, snippet); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Data Conversion ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifndef TEXT_TY_BufferSize; Constant TEXT_TY_BufferSize = 512; #endif; Constant TEXT_TY_NoBuffers = 2; #ifdef TARGET_ZCODE; Array TEXT_TY_Buffers -> TEXT_TY_BufferSize*TEXT_TY_NoBuffers; ! Where characters are bytes #ifnot; Array TEXT_TY_Buffers --> (TEXT_TY_BufferSize+2)*TEXT_TY_NoBuffers; ! Where characters are words #endif; Global RawBufferAddress = TEXT_TY_Buffers; Global RawBufferSize = TEXT_TY_BufferSize; Global TEXT_TY_CastPrimitiveNesting = 0; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Z Version ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifdef TARGET_ZCODE; [ TEXT_TY_CastPrimitive to_txt from_snippet from_value len news buffer; if (to_txt == 0) BlkValueError("no destination for cast"); SuspendRTP(); buffer = RawBufferAddress + TEXT_TY_CastPrimitiveNesting*TEXT_TY_BufferSize; TEXT_TY_CastPrimitiveNesting++; if (TEXT_TY_CastPrimitiveNesting > TEXT_TY_NoBuffers) FlexError("ran out with too many simultaneous text conversions"); @push say__p; @push say__pc; ClearParagraphing(6); @output_stream 3 buffer; if (from_value) { if (from_snippet) print (PrintSnippet) from_value; else print (PrintI6Text) from_value; } @output_stream -3; @pull say__pc; @pull say__p; ResumeRTP(); len = buffer-->0; if (len > RawBufferSize-1) len = RawBufferSize-1; buffer->(len+2) = 0; TEXT_TY_CastPrimitiveNesting--; BlkValueMassCopyFromArray(to_txt, buffer+2, 1, len+1); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Glulx Version ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== #ifnot; ! TARGET_ZCODE [ TEXT_TY_CastPrimitive to_txt from_snippet from_value len i stream saved_stream news buffer buffer_size memory_to_free results; if (to_txt == 0) BlkValueError("no destination for cast"); buffer_size = (TEXT_TY_BufferSize + 2)*WORDSIZE; RawBufferSize = TEXT_TY_BufferSize; buffer = RawBufferAddress + TEXT_TY_CastPrimitiveNesting*buffer_size; TEXT_TY_CastPrimitiveNesting++; if (TEXT_TY_CastPrimitiveNesting > TEXT_TY_NoBuffers) { buffer = VM_AllocateMemory(buffer_size); memory_to_free = buffer; if (buffer == 0) FlexError("ran out with too many simultaneous text conversions"); } if (unicode_gestalt_ok) { SuspendRTP(); .RetryWithLargerBuffer; saved_stream = glk_stream_get_current(); stream = glk_stream_open_memory_uni(buffer, RawBufferSize, filemode_Write, 0); glk_stream_set_current(stream); @push say__p; @push say__pc; ClearParagraphing(7); if (from_snippet) print (PrintSnippet) from_value; else print (PrintI6Text) from_value; @pull say__pc; @pull say__p; results = buffer + buffer_size - 2*WORDSIZE; glk_stream_close(stream, results); if (saved_stream) glk_stream_set_current(saved_stream); ResumeRTP(); len = results-->1; if (len > RawBufferSize-1) { ! Glulx had to truncate text output because the buffer ran out: ! len is the number of characters which it tried to print news = RawBufferSize; while (news < len) news=news*2; i = VM_AllocateMemory(news*WORDSIZE); if (i ~= 0) { if (memory_to_free) VM_FreeMemory(memory_to_free); memory_to_free = i; buffer = i; RawBufferSize = news; buffer_size = (RawBufferSize + 2)*WORDSIZE; jump RetryWithLargerBuffer; } ! Memory allocation refused: all we can do is to truncate the text len = RawBufferSize-1; } buffer-->(len) = 0; TEXT_TY_CastPrimitiveNesting--; BlkValueMassCopyFromArray(to_txt, buffer, 4, len+1); } else { RunTimeProblem(RTP_NOGLULXUNICODE); } if (memory_to_free) VM_FreeMemory(memory_to_free); ]; #endif; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Comparison ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Compare left_txt right_txt rv; @push say__comp; say__comp = true; rv = TEXT_TY_Compare_Inner(left_txt, right_txt); @pull say__comp; return rv; ]; [ TEXT_TY_Compare_Inner left_txt right_txt pos ch1 ch2 capacity_left capacity_right fl fr cl cr cpl cpr; if (left_txt-->0 & BLK_BVBITMAP_LONGBLOCKMASK == 0) fl = true; if (right_txt-->0 & BLK_BVBITMAP_LONGBLOCKMASK == 0) fr = true; if (fl && fr) { if ((left_txt-->1 ofclass String) && (right_txt-->1 ofclass String)) return left_txt-->1 - right_txt-->1; if ((left_txt-->1 ofclass Routine) && (right_txt-->1 ofclass Routine)) return left_txt-->1 - right_txt-->1; cpl = left_txt-->0; cl = TEXT_TY_Temporarily_Transmute(left_txt); cpr = right_txt-->0; cr = TEXT_TY_Temporarily_Transmute(right_txt); } else if (fl) { cpl = left_txt-->0; cl = TEXT_TY_Temporarily_Transmute(left_txt); } else if (fr) { cpr = right_txt-->0; cr = TEXT_TY_Temporarily_Transmute(right_txt); } if ((cl) || (cr)) { pos = TEXT_TY_Compare(left_txt, right_txt); TEXT_TY_Untransmute(left_txt, cl, cpl); TEXT_TY_Untransmute(right_txt, cr, cpr); return pos; } capacity_left = BlkValueLBCapacity(left_txt); capacity_right = BlkValueLBCapacity(right_txt); for (pos=0:(pos0; p = TEXT_TY_Temporarily_Transmute(txt); rv = 0; len = BlkValueLBCapacity(txt); for (i=0: i0 & BLK_BVBITMAP_LONGBLOCKMASK == 0) return PrintI6Text(txt-->1); dsize = BlkValueLBCapacity(txt); for (i=0: i 0) { BlkValueWrite(mod, 0, CharToCase(BlkValueRead(mod, 0), 1)); TEXT_TY_Say(mod); rc = true; say__p = 1; } BlkValueFree(mod); return rc; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Serialisation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_WriteFile txt len pos ch p cp; cp = txt-->0; p = TEXT_TY_Temporarily_Transmute(txt); len = BlkValueLBCapacity(txt); print "S"; for (pos=0: pos<=len: pos++) { if (pos == len) ch = 0; else ch = BlkValueRead(txt, pos); if (ch == 0) { print "0;"; break; } else { print ch, ","; } } TEXT_TY_Untransmute(txt, p, cp); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Unserialisation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_ReadFile txt auxf ch i v dg pos tsize p; TEXT_TY_Transmute(txt); tsize = BlkValueLBCapacity(txt); while (ch ~= 32 or 9 or 10 or 13 or 0 or -1) { ch = FileIO_GetC(auxf); if (ch == ',' or ';') { if (pos+1 >= tsize) { if (BlkValueSetLBCapacity(txt, 2*pos) == false) break; tsize = BlkValueLBCapacity(txt); } BlkValueWrite(txt, pos++, v); v = 0; if (ch == ';') break; } else { dg = ch - '0'; v = v*10 + dg; } } BlkValueWrite(txt, pos, 0); return txt; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Substitution ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_SubstitutedForm to txt; if (txt) { BlkValueCopy(to, txt); TEXT_TY_Transmute(to); } return to; ]; [ TEXT_TY_IsSubstituted txt; if ((txt) && (txt-->0 & BLK_BVBITMAP_LONGBLOCKMASK == 0) && (txt-->1 ofclass Routine)) rfalse; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Perishability ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_ExpandIfPerishable to from; if ((from) && (from-->0 == CONSTANT_PERISHABLE_TEXT_STORAGE)) return TEXT_TY_SubstitutedForm(to, from); return from; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Recognition-only-GPR ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_ROGPR txt p cp r; if (txt == 0) return GPR_FAIL; cp = txt-->0; p = TEXT_TY_Temporarily_Transmute(txt); r = TEXT_TY_ROGPRI(txt); TEXT_TY_Untransmute(txt, p, cp); return r; ]; [ TEXT_TY_ROGPRI txt pos len wa wl wpos bdm ch own; bdm = true; own = wn; len = BlkValueLBCapacity(txt); for (pos=0: pos<=len: pos++) { if (pos == len) ch = 0; else ch = BlkValueRead(txt, pos); if (ch == 32 or 9 or 10 or 0) { if (bdm) continue; bdm = true; if (wpos ~= wl) return GPR_FAIL; if (ch == 0) break; } else { if (bdm) { bdm = false; if (NextWordStopped() == -1) return GPR_FAIL; wa = WordAddress(wn-1); wl = WordLength(wn-1); wpos = 0; } if (wa->wpos ~= ch or TEXT_TY_RevCase(ch)) return GPR_FAIL; wpos++; } } if (wn == own) return GPR_FAIL; ! Progress must be made to avoid looping return GPR_PREPOSITION; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Blobs ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant CHR_BLOB = 1; ! Construe as an array of characters Constant WORD_BLOB = 2; ! Of words Constant PWORD_BLOB = 3; ! Of punctuated words Constant UWORD_BLOB = 4; ! Of unpunctuated words Constant PARA_BLOB = 5; ! Of paragraphs Constant LINE_BLOB = 6; ! Of lines Constant REGEXP_BLOB = 7; ! Not a blob type as such, but needed as a distinct value ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Blob Access ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant WS_BRM = 1; Constant SKIPPED_BRM = 2; Constant ACCEPTED_BRM = 3; Constant ACCEPTEDP_BRM = 4; Constant ACCEPTEDN_BRM = 5; Constant ACCEPTEDPN_BRM = 6; [ TEXT_TY_BlobAccess txt blobtype ctxt wanted rtxt p1 p2 cp1 cp2 r; if (txt==0) return 0; if (blobtype == CHR_BLOB) return TEXT_TY_CharacterLength(txt); cp1 = txt-->0; p1 = TEXT_TY_Temporarily_Transmute(txt); cp2 = rtxt-->0; p2 = TEXT_TY_Temporarily_Transmute(rtxt); TEXT_TY_Transmute(ctxt); r = TEXT_TY_BlobAccessI(txt, blobtype, ctxt, wanted, rtxt); TEXT_TY_Untransmute(txt, p1, cp1); TEXT_TY_Untransmute(rtxt, p2, cp2); return r; ]; [ TEXT_TY_BlobAccessI txt blobtype ctxt wanted rtxt brm oldbrm ch i dsize csize blobcount gp cl j; dsize = BlkValueLBCapacity(txt); if (ctxt) csize = BlkValueLBCapacity(ctxt); else if (rtxt) "*** rtxt without ctxt ***"; brm = WS_BRM; for (i=0:i= 2) brm = WS_BRM; LINE_BLOB: if (gp >= 1) brm = WS_BRM; default: brm = WS_BRM; } } } else { gp = false; if ((blobtype == WORD_BLOB or PWORD_BLOB or UWORD_BLOB) && (ch == '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}')) gp = true; switch (oldbrm) { WS_BRM: brm = ACCEPTED_BRM; if (blobtype == WORD_BLOB) { if (gp) brm = SKIPPED_BRM; } if (blobtype == PWORD_BLOB) { if (gp) brm = ACCEPTEDP_BRM; } SKIPPED_BRM: if (blobtype == WORD_BLOB) { if (gp == false) brm = ACCEPTED_BRM; } ACCEPTED_BRM: if (blobtype == WORD_BLOB) { if (gp) brm = SKIPPED_BRM; } if (blobtype == PWORD_BLOB) { if (gp) brm = ACCEPTEDP_BRM; } ACCEPTEDP_BRM: if (blobtype == PWORD_BLOB) { if (gp == false) brm = ACCEPTED_BRM; else { if ((ch == BlkValueRead(txt, i-1)) && (ch == '-' or '.')) blobcount--; blobcount++; } } ACCEPTEDN_BRM: if (blobtype == WORD_BLOB) { if (gp) brm = SKIPPED_BRM; } if (blobtype == PWORD_BLOB) { if (gp) brm = ACCEPTEDP_BRM; } ACCEPTEDPN_BRM: if (blobtype == PWORD_BLOB) { if (gp == false) brm = ACCEPTED_BRM; else { if ((ch == BlkValueRead(txt, i-1)) && (ch == '-' or '.')) blobcount--; blobcount++; } } } } if (brm == ACCEPTED_BRM or ACCEPTEDP_BRM) { if (oldbrm ~= brm) blobcount++; if ((ctxt) && (blobcount == wanted)) { if (rtxt) { BlkValueWrite(ctxt, cl, 0); TEXT_TY_Concatenate(ctxt, rtxt, CHR_BLOB); csize = BlkValueLBCapacity(ctxt); cl = TEXT_TY_CharacterLength(ctxt); if (brm == ACCEPTED_BRM) brm = ACCEPTEDN_BRM; if (brm == ACCEPTEDP_BRM) brm = ACCEPTEDPN_BRM; } else { if (cl+1 >= csize) { if (BlkValueSetLBCapacity(ctxt, 2*cl) == false) break; csize = BlkValueLBCapacity(ctxt); } BlkValueWrite(ctxt, cl++, ch); } } else { if (rtxt) { if (cl+1 >= csize) { if (BlkValueSetLBCapacity(ctxt, 2*cl) == false) break; csize = BlkValueLBCapacity(ctxt); } BlkValueWrite(ctxt, cl++, ch); } } } else { if ((rtxt) && (brm ~= ACCEPTEDN_BRM or ACCEPTEDPN_BRM)) { if (cl+1 >= csize) { if (BlkValueSetLBCapacity(ctxt, 2*cl) == false) break; csize = BlkValueLBCapacity(ctxt); } BlkValueWrite(ctxt, cl++, ch); } } } if (ctxt) BlkValueWrite(ctxt, cl++, 0); return blobcount; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Get Blob ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_GetBlob ctxt txt wanted blobtype; if (txt==0) return; if (blobtype == CHR_BLOB) return TEXT_TY_GetCharacter(ctxt, txt, wanted); TEXT_TY_BlobAccess(txt, blobtype, ctxt, wanted); return ctxt; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Replace Blob ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_ReplaceBlob blobtype txt wanted rtxt ctxt ilen rlen i p cp; TEXT_TY_Transmute(txt); cp = rtxt-->0; p = TEXT_TY_Temporarily_Transmute(rtxt); if (blobtype == CHR_BLOB) { ilen = TEXT_TY_CharacterLength(txt); rlen = TEXT_TY_CharacterLength(rtxt); wanted--; if ((wanted >= 0) && (wanted0; p1 = TEXT_TY_Temporarily_Transmute(ftxt); cp2 = rtxt-->0; p2 = TEXT_TY_Temporarily_Transmute(rtxt); r = TEXT_TY_ReplaceTextI(blobtype, txt, ftxt, rtxt); TEXT_TY_Untransmute(ftxt, p1, cp1); TEXT_TY_Untransmute(rtxt, p2, cp2); return r; ]; [ TEXT_TY_ReplaceTextI blobtype txt ftxt rtxt ctxt csize ilen flen i cl mpos ch chm whitespace punctuation; if (blobtype == REGEXP_BLOB or CHR_BLOB) return TEXT_TY_Replace_RE(blobtype, txt, ftxt, rtxt); ilen = TEXT_TY_CharacterLength(txt); flen = TEXT_TY_CharacterLength(ftxt); ctxt = BlkValueCreate(TEXT_TY); TEXT_TY_Transmute(ctxt); csize = BlkValueLBCapacity(ctxt); mpos = 0; whitespace = true; punctuation = false; for (i=0:i<=ilen:i++) { ch = BlkValueRead(txt, i); .MoreMatching; chm = BlkValueRead(ftxt, mpos++); if (mpos == 1) { switch (blobtype) { WORD_BLOB: if ((whitespace == false) && (punctuation == false)) chm = -1; } } whitespace = false; if (ch == 10 or 13 or 32 or 9) whitespace = true; punctuation = false; if (ch == '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') { if (blobtype == WORD_BLOB) chm = -1; punctuation = true; } if (ch == chm) { if (mpos == flen) { if (i == ilen) chm = 0; else chm = BlkValueRead(txt, i+1); if ((blobtype == CHR_BLOB) || (chm == 0 or 10 or 13 or 32 or 9) || (chm == '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}')) { mpos = 0; cl = cl - (flen-1); BlkValueWrite(ctxt, cl, 0); TEXT_TY_Concatenate(ctxt, rtxt, CHR_BLOB); csize = BlkValueLBCapacity(ctxt); cl = TEXT_TY_CharacterLength(ctxt); continue; } } } else { mpos = 0; } if (cl+1 >= csize) { if (BlkValueSetLBCapacity(ctxt, 2*cl) == false) break; csize = BlkValueLBCapacity(ctxt); } BlkValueWrite(ctxt, cl++, ch); } BlkValueCopy(txt, ctxt); BlkValueFree(ctxt); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Character Length ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_CharacterLength txt ch i dsize p cp r; if (txt==0) return 0; cp = txt-->0; p = TEXT_TY_Temporarily_Transmute(txt); dsize = BlkValueLBCapacity(txt); r = dsize; for (i=0:i0 & BLK_BVBITMAP_LONGBLOCKMASK == 0) { if (txt-->1 == EMPTY_TEXT_PACKED) rtrue; rfalse; } if (TEXT_TY_CharacterLength(txt) == 0) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Get Character ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_GetCharacter ctxt txt i ch p cp; if (txt==0) return 0; cp = txt-->0; p = TEXT_TY_Temporarily_Transmute(txt); TEXT_TY_Transmute(ctxt); if ((i<=0) || (i>TEXT_TY_CharacterLength(txt))) ch = 0; else ch = BlkValueRead(txt, i-1); BlkValueWrite(ctxt, 0, ch); BlkValueWrite(ctxt, 1, 0); TEXT_TY_Untransmute(txt, p, cp); return ctxt; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Text.i6t: Casing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_CharactersOfCase txt case i ch len p cp r; if (txt==0) return 0; cp = txt-->0; p = TEXT_TY_Temporarily_Transmute(txt); len = TEXT_TY_CharacterLength(txt); r = true; for (i=0:i0; pk = TEXT_TY_Temporarily_Transmute(txt); TEXT_TY_Transmute(ctxt); len = TEXT_TY_CharacterLength(txt); if (BlkValueSetLBCapacity(ctxt, len+1)) { bnd = 1; for (i=0:i0; p = TEXT_TY_Temporarily_Transmute(from_txt); r = TEXT_TY_ConcatenateI(to_txt, from_txt, blobtype, ref_txt); TEXT_TY_Untransmute(from_txt, p, cp); return r; ]; [ TEXT_TY_ConcatenateI to_txt from_txt blobtype ref_txt pos len ch i tosize x y case; switch(blobtype) { CHR_BLOB, 0: pos = TEXT_TY_CharacterLength(to_txt); len = TEXT_TY_CharacterLength(from_txt); if (BlkValueSetLBCapacity(to_txt, pos+len+1) == false) return to_txt; for (i=0:i0; p = TEXT_TY_Temporarily_Transmute(from_txt); len = TEXT_TY_CharacterLength(from_txt); if (len > 118) len = 118; #ifdef TARGET_ZCODE; buffer->1 = len; at = 2; #ifnot; buffer-->0 = len; at = 4; #endif; for (i=0:i(i+at) = CharToCase(BlkValueRead(from_txt, i), 0); for (:at+i<120:i++) buffer->(at+i) = ' '; VM_Tokenise(buffer, parse); players_command = 100 + WordCount(); ! The snippet variable "player's command" TEXT_TY_Untransmute(from_txt, p, cp); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Debugging ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global TEXT_TY_RE_Trace = false; ! Change to true for (a lot of) debugging data in use [ TEXT_TY_RE_SetTrace F; TEXT_TY_RE_Trace = F; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Algorithm ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Class Codes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Character classes Constant NEWLINE_RE_CC = -1; Constant TAB_RE_CC = -2; Constant DIGIT_RE_CC = -3; Constant NONDIGIT_RE_CC = -4; Constant WHITESPACE_RE_CC = -5; Constant NONWHITESPACE_RE_CC = -6; Constant PUNCTUATION_RE_CC = -7; Constant NONPUNCTUATION_RE_CC = -8; Constant WORD_RE_CC = -9; Constant NONWORD_RE_CC = -10; Constant ANYTHING_RE_CC = -11; Constant NOTHING_RE_CC = -12; Constant RANGE_RE_CC = -13; Constant LCASE_RE_CC = -14; Constant NONLCASE_RE_CC = -15; Constant UCASE_RE_CC = -16; Constant NONUCASE_RE_CC = -17; ! Control structures Constant SUBEXP_RE_CC = -20; Constant DISJUNCTION_RE_CC = -21; Constant CHOICE_RE_CC = -22; Constant QUANTIFIER_RE_CC = -23; Constant IF_RE_CC = -24; Constant CONDITION_RE_CC = -25; Constant THEN_RE_CC = -26; Constant ELSE_RE_CC = -27; ! Substring matchers Constant VARIABLE_RE_CC = -30; Constant LITERAL_RE_CC = -31; ! Positional matchers Constant START_RE_CC = -40; Constant END_RE_CC = -41; Constant BOUNDARY_RE_CC = -42; Constant NONBOUNDARY_RE_CC = -43; Constant ALWAYS_RE_CC = -44; Constant NEVER_RE_CC = -45; ! Mode switches Constant SENSITIVITY_RE_CC = -50; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Packets ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RE_MAX_PACKETS = 32; Constant RE_PACKET_SIZE = 14; ! Words of memory used per packet Constant RE_PACKET_SIZE_IN_BYTES = WORDSIZE*RE_PACKET_SIZE; ! Bytes used per packet Array RE_PACKET_space --> RE_MAX_PACKETS*RE_PACKET_SIZE; Constant RE_CCLASS = 0; ! One of the class codes defined above Constant RE_PAR1 = 1; ! Three parameters whose meaning depends on class code Constant RE_PAR2 = 2; Constant RE_PAR3 = 3; Constant RE_NEXT = 4; ! Younger sibling in the compiled tree Constant RE_PREVIOUS = 5; ! Elder sibling Constant RE_DOWN = 6; ! Child Constant RE_UP = 7; ! Parent Constant RE_DATA1 = 8; ! Backtracking data Constant RE_DATA2 = 9; Constant RE_CONSTRAINT = 10; Constant RE_CACHE1 = 11; Constant RE_CACHE2 = 12; Constant RE_MODES = 13; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Nodes ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_Node n cc par1 par2 par3 offset; if ((n<0) || (n >= RE_MAX_PACKETS)) rfalse; offset = RE_PACKET_space + n*RE_PACKET_SIZE_IN_BYTES; offset-->RE_CCLASS = cc; offset-->RE_PAR1 = par1; offset-->RE_PAR2 = par2; offset-->RE_PAR3 = par3; offset-->RE_NEXT = NULL; offset-->RE_PREVIOUS = NULL; offset-->RE_DOWN = NULL; offset-->RE_UP = NULL; offset-->RE_DATA1 = -1; ! Match start offset-->RE_DATA2 = -1; ! Match end offset-->RE_CONSTRAINT = -1; ! Rewind edge return offset; ]; [ TEXT_TY_RE_NodeAddress n; if ((n<0) || (n >= RE_MAX_PACKETS)) return -1; return RE_PACKET_space + n*RE_PACKET_SIZE_IN_BYTES; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Match Variables ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array RE_Subexpressions --> 11; ! Address of node for this subexpression Array Allocated_Match_Vars --> 10; ! Indexed text to hold values of the variables [ TEXT_TY_RE_DebugMatchVars txt offset n i; print RE_Subexpressions-->10, " collecting subexps^"; for (n=0:(n10) && (n<10): n++) { offset = RE_Subexpressions-->n; print "Subexp ", offset-->RE_PAR1, " = [", offset-->RE_DATA1, ",", offset-->RE_DATA2, "] = "; for (i=offset-->RE_DATA1:iRE_DATA2:i++) print (char) BlkValueRead(txt, i); print "^"; } ]; [ TEXT_TY_RE_CreateMatchVars txt offset n i ch ctxt cl csize; for (n=0:(n10) && (n<10): n++) { offset = RE_Subexpressions-->n; if (Allocated_Match_Vars-->n) BlkValueFree(Allocated_Match_Vars-->n); Allocated_Match_Vars-->n = BlkValueCreate(TEXT_TY); TEXT_TY_Transmute(Allocated_Match_Vars-->n); ctxt = Allocated_Match_Vars-->n; csize = BlkValueLBCapacity(ctxt); cl = 0; for (i=offset-->RE_DATA1:iRE_DATA2:i++) { ch = BlkValueRead(txt, i); if (cl+1 >= csize) { if (BlkValueSetLBCapacity(ctxt, 2*cl) == false) break; csize = BlkValueLBCapacity(ctxt); } BlkValueWrite(ctxt, cl++, ch); } BlkValueWrite(ctxt, cl, 0); } ]; [ TEXT_TY_RE_EmptyMatchVars txt n; for (n=0:(n10) && (n<10): n++) if (Allocated_Match_Vars-->n ~= 0) BlkValueWrite(Allocated_Match_Vars-->n, 0, 0); ]; [ TEXT_TY_RE_GetMatchVar vn offset; if ((vn<0) || (vn>=10) || (vn >= RE_Subexpressions-->10)) return EMPTY_TEXT_VALUE; offset = RE_Subexpressions-->vn; if (offset == 0) return EMPTY_TEXT_VALUE; if (offset-->RE_DATA1 < 0) return EMPTY_TEXT_VALUE; if (Allocated_Match_Vars-->vn == 0) { print "*** ", vn, " unallocated! ***^"; return EMPTY_TEXT_VALUE; } return Allocated_Match_Vars-->vn; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Markers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_MV_End n end offset; offset = RE_Subexpressions-->n; if (end==0) return offset-->RE_DATA1; return offset-->RE_DATA2; ]; [ TEXT_TY_RE_Clear_Markers token; for (: token ~= NULL: token = token-->RE_NEXT) { if (token-->RE_DOWN ~= NULL) TEXT_TY_RE_Clear_Markers(token-->RE_DOWN); token-->RE_DATA1 = -1; token-->RE_DATA2 = -1; token-->RE_CONSTRAINT = -1; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Debugging ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_DebugTree ftxt detail; print "Pattern: ", (TEXT_TY_Say) ftxt, "^"; TEXT_TY_RE_DebugSubtree(ftxt, 1, RE_PACKET_space, detail); ]; [ TEXT_TY_RE_DebugSubtree ftxt depth offset detail cup; if (offset ~= NULL) { cup = offset-->RE_UP; if (offset-->RE_PREVIOUS ~= NULL) print "*** broken initial previous ***^"; } while (offset ~= NULL) { if (offset-->RE_UP ~= cup) print "*** broken up matching ***^"; spaces(depth*2); TEXT_TY_RE_DebugNode(offset, ftxt, detail); if (offset-->RE_DOWN ~= NULL) { if ((offset-->RE_DOWN)-->RE_UP ~= offset) print "*** broken down/up ***^"; TEXT_TY_RE_DebugSubtree(ftxt, depth+1, offset-->RE_DOWN, detail); } if (offset-->RE_NEXT ~= NULL) { if ((offset-->RE_NEXT)-->RE_PREVIOUS ~= offset) print "*** broken next/previous ***^"; } offset = offset-->RE_NEXT; } ]; [ TEXT_TY_RE_DebugNode offset ftxt detail i par1 par2 par3; if (offset == NULL) "[NULL]"; print "[", (offset-RE_PACKET_space)/(RE_PACKET_SIZE_IN_BYTES), "] "; ! for (i=0:ii, " "; par1 = offset-->RE_PAR1; par2 = offset-->RE_PAR2; par3 = offset-->RE_PAR3; switch (offset-->RE_CCLASS) { DIGIT_RE_CC: print "DIGIT"; NONDIGIT_RE_CC: print "NONDIGIT"; UCASE_RE_CC: print "UCASE"; NONUCASE_RE_CC: print "NONUCASE"; LCASE_RE_CC: print "LCASE"; NONLCASE_RE_CC: print "NONLCASE"; WHITESPACE_RE_CC: print "WHITESPACE"; NONWHITESPACE_RE_CC: print "NONWHITESPACE"; PUNCTUATION_RE_CC: print "PUNCTUATION"; NONPUNCTUATION_RE_CC: print "NONPUNCTUATION"; WORD_RE_CC: print "WORD"; NONWORD_RE_CC: print "NONWORD"; ALWAYS_RE_CC: print "ALWAYS"; NEVER_RE_CC: print "NEVER"; START_RE_CC: print "START"; END_RE_CC: print "END"; BOUNDARY_RE_CC: print "BOUNDARY"; NONBOUNDARY_RE_CC: print "NONBOUNDARY"; ANYTHING_RE_CC: print "ANYTHING"; NOTHING_RE_CC: print "NOTHING"; RANGE_RE_CC: print "RANGE"; if (par3 == true) print " (negated)"; print " "; for (i=par1:i= 0) print "= V", par1; if (par2 == 1) { if (par3 == 0) print " (?=...) lookahead"; else print " (?<=...) lookbehind of width ", par3; } if (par2 == 2) { if (par3 == 0) print " (?!...) negated lookahead"; else print " (?...) possessive"; NEWLINE_RE_CC: print "NEWLINE"; TAB_RE_CC: print "TAB"; QUANTIFIER_RE_CC: print "QUANTIFIER min=", par1, " max=", par2; if (par3) print " (lazy)"; else print " (greedy)"; LITERAL_RE_CC: print "LITERAL"; print " "; for (i=par1:i= 1) print " = V", par1; CONDITION_RE_CC: print "CONDITION"; if (par1 >= 1) print " = V", par1; THEN_RE_CC: print "THEN"; ELSE_RE_CC: print "ELSE"; } if (detail) print ": ", offset-->RE_DATA1, ", ", offset-->RE_DATA2, ", ", offset-->RE_CONSTRAINT; print "^"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Compiling Tree For Substring Search ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_CHR_CompileTree ftxt exactly root literal fto no_packets token attach_to; fto = TEXT_TY_CharacterLength(ftxt); root = TEXT_TY_RE_Node(0, SUBEXP_RE_CC, 0, 0, 0); literal = TEXT_TY_RE_Node(1, LITERAL_RE_CC, 0, fto, 0); root-->RE_DOWN = literal; literal-->RE_UP = root; if (exactly) { no_packets = 2; if (no_packets+3 > RE_MAX_PACKETS) return "regexp too complex"; exactly = RE_PACKET_space-->RE_DOWN; token = TEXT_TY_RE_Node(no_packets++, START_RE_CC, 0, 0, 0); RE_PACKET_space-->RE_DOWN = token; token-->RE_UP = RE_PACKET_space; attach_to = TEXT_TY_RE_Node(no_packets++, SUBEXP_RE_CC, -1, 3, 0); token-->RE_NEXT = attach_to; attach_to-->RE_PREVIOUS = token; attach_to-->RE_UP = RE_PACKET_space; attach_to-->RE_NEXT = TEXT_TY_RE_Node(no_packets++, END_RE_CC, 0, 0, 0); (attach_to-->RE_NEXT)-->RE_PREVIOUS = attach_to; (attach_to-->RE_NEXT)-->RE_UP = RE_PACKET_space; attach_to-->RE_DOWN = exactly; while (exactly ~= NULL) { exactly-->RE_UP = attach_to; exactly = exactly-->RE_NEXT; } } no_packets = TEXT_TY_RE_ExpandChoices(RE_PACKET_space, no_packets); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Compiling Tree For Regexp Search ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array Subexp_Posns --> 20; [ TEXT_TY_RE_CompileTree ftxt exactly no_packets ffrom fto cc par1 par2 par3 quantifiable token attach_to no_subs blevel bits; fto = TEXT_TY_CharacterLength(ftxt); if (fto == 0) { TEXT_TY_RE_Node(no_packets++, NEVER_RE_CC, 0, 0, 0); ! Empty regexp never matches return 1; } attach_to = TEXT_TY_RE_Node(no_packets++, SUBEXP_RE_CC, 0, 0, 0); RE_Subexpressions-->0 = attach_to; RE_Subexpressions-->10 = 1; no_subs = 1; quantifiable = false; blevel = 0; for (ffrom = 0: ffrom < fto: ) { cc = BlkValueRead(ftxt, ffrom++); par1 = 0; par2 = 0; par3 = 0; if (cc == '\') { if (ffrom == fto) return "Search pattern not terminated"; cc = BlkValueRead(ftxt, ffrom++); switch (cc) { 'b': cc = BOUNDARY_RE_CC; 'B': cc = NONBOUNDARY_RE_CC; 'd': cc = DIGIT_RE_CC; 'D': cc = NONDIGIT_RE_CC; 'l': cc = LCASE_RE_CC; 'L': cc = NONLCASE_RE_CC; 'n': cc = NEWLINE_RE_CC; 'p': cc = PUNCTUATION_RE_CC; 'P': cc = NONPUNCTUATION_RE_CC; 's': cc = WHITESPACE_RE_CC; 'S': cc = NONWHITESPACE_RE_CC; 't': cc = TAB_RE_CC; 'u': cc = UCASE_RE_CC; 'U': cc = NONUCASE_RE_CC; 'w': cc = WORD_RE_CC; 'W': cc = NONWORD_RE_CC; default: if ((cc >= '1') && (cc <= '9')) { par1 = cc-'0'; cc = VARIABLE_RE_CC; } else { if (((cc >= 'a') && (cc <= 'z')) || ((cc >= 'A') && (cc <= 'Z'))) return "unknown escape"; cc = LITERAL_RE_CC; par1 = ffrom-1; par2 = ffrom; } } quantifiable = true; } else { switch (cc) { '(': par2 = 0; !if (BlkValueRead(ftxt, ffrom) == ')') return "empty subexpression"; if (BlkValueRead(ftxt, ffrom) == '?') { ffrom++; bits = true; if (BlkValueRead(ftxt, ffrom) == '-') { ffrom++; bits = false; } else if (BlkValueRead(ftxt, ffrom) == '<') { ffrom++; bits = false; } switch (cc = BlkValueRead(ftxt, ffrom++)) { '#': while (BlkValueRead(ftxt, ffrom++) ~= 0 or ')') ; if (BlkValueRead(ftxt, ffrom-1) == 0) return "comment never ends"; continue; '(': cc = BlkValueRead(ftxt, ffrom); if ((cc == '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9') && (BlkValueRead(ftxt, ffrom+1) ==')')) { ffrom = ffrom + 2; par1 = cc - '0'; } else ffrom--; cc = IF_RE_CC; ! (?(...)...) conditional quantifiable = false; if (blevel == 20) return "subexpressions too deep"; Subexp_Posns-->(blevel++) = TEXT_TY_RE_NodeAddress(no_packets); jump CClassKnown; '=': par2 = 1; ! (?=...) lookahead/behind par3 = 0; if (bits == false) par3 = -1; '!': par2 = 2; ! (?!...) negated lookahead/behind par3 = 0; if (bits == false) par3 = -1; ':': par2 = 3; ! (?:...) uncollecting subexpression '>': par2 = 4; ! (?>...) possessive default: if (BlkValueRead(ftxt, ffrom) == ')') { if (cc == 'i') { cc = SENSITIVITY_RE_CC; par1 = bits; ffrom++; jump CClassKnown; } } if (BlkValueRead(ftxt, ffrom) == ':') { if (cc == 'i') { par1 = bits; par2 = 3; par3 = bits+1; ffrom++; jump AllowForm; } } return "unknown (?...) form"; } } .AllowForm; if (par2 == 0) par1 = no_subs++; else par1 = -1; cc = SUBEXP_RE_CC; quantifiable = false; if (blevel == 20) return "subexpressions too deep"; Subexp_Posns-->(blevel++) = TEXT_TY_RE_NodeAddress(no_packets); ')': if (blevel == 0) return "subexpression bracket mismatch"; blevel--; attach_to = Subexp_Posns-->blevel; if (attach_to-->RE_DOWN == NULL) { if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; attach_to-->RE_DOWN = TEXT_TY_RE_Node(no_packets++, ALWAYS_RE_CC, 0, 0, 0); (attach_to-->RE_DOWN)-->RE_UP = attach_to; } quantifiable = true; continue; '.': cc = ANYTHING_RE_CC; quantifiable = true; '|': cc = CHOICE_RE_CC; quantifiable = false; '^': cc = START_RE_CC; quantifiable = false; '$': cc = END_RE_CC; quantifiable = false; '{': if (quantifiable == false) return "quantifier misplaced"; par1 = 0; par2 = -1; bits = 1; while ((cc=BlkValueRead(ftxt, ffrom++)) ~= 0 or '}') { if (cc == ',') { bits++; if (bits >= 3) return "too many colons in ?{...}"; continue; } if ((cc >= '0') || (cc <= '9')) { if (bits == 1) { if (par1 < 0) par1 = 0; par1 = par1*10 + (cc-'0'); } else { if (par2 < 0) par2 = 0; par2 = par2*10 + (cc-'0'); } } else return "non-digit in ?{...}"; } if (cc ~= '}') return "{x,y} quantifier never ends"; cc = QUANTIFIER_RE_CC; if (par2 == -1) { if (bits == 2) par2 = 30000; else par2 = par1; } if (par1 > par2) return "{x,y} with x greater than y"; if (BlkValueRead(ftxt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; '<', '[': par3 = false; if (cc == '<') bits = '>'; else bits = ']'; if (BlkValueRead(ftxt, ffrom) == '^') { ffrom++; par3 = true; } par1 = ffrom; if (BlkValueRead(ftxt, ffrom) == bits) { ffrom++; } while (cc ~= bits or 0) { cc = BlkValueRead(ftxt, ffrom++); if (cc == '\') { cc = BlkValueRead(ftxt, ffrom++); if (cc ~= 0) cc = BlkValueRead(ftxt, ffrom++); } } if (cc == 0) return "Character range never ends"; par2 = ffrom-1; if ((par2 > par1 + 1) && (BlkValueRead(ftxt, par1) == ':') && (BlkValueRead(ftxt, par2-1) == ':') && (BlkValueRead(ftxt, par2-2) ~= '\')) return "POSIX named character classes unsupported"; bits = TEXT_TY_RE_RangeSyntaxCorrect(ftxt, par1, par2); if (bits) return bits; if (par1 < par2) cc = RANGE_RE_CC; else cc = NOTHING_RE_CC; quantifiable = true; '*': if (quantifiable == false) return "quantifier misplaced"; cc = QUANTIFIER_RE_CC; par1 = 0; par2 = 30000; if (BlkValueRead(ftxt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; '+': if (quantifiable == false) return "quantifier misplaced"; cc = QUANTIFIER_RE_CC; par1 = 1; par2 = 30000; if (BlkValueRead(ftxt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; '?': if (quantifiable == false) return "quantifier misplaced"; cc = QUANTIFIER_RE_CC; par1 = 0; par2 = 1; if (BlkValueRead(ftxt, ffrom) == '?') { ffrom++; par3 = true; } quantifiable = false; } } .CClassKnown; if (cc >= 0) { quantifiable = true; if ((attach_to-->RE_CCLASS == LITERAL_RE_CC) && (BlkValueRead(ftxt, ffrom) ~= '*' or '+' or '?' or '{')) { (attach_to-->RE_PAR2)++; if (TEXT_TY_RE_Trace == 2) { print "Extending literal by ", cc, "=", (char) cc, "^"; } continue; } cc = LITERAL_RE_CC; par1 = ffrom-1; par2 = ffrom; } if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; if (TEXT_TY_RE_Trace == 2) { print "Attaching packet ", no_packets+1, " to "; TEXT_TY_RE_DebugNode(attach_to, ftxt); TEXT_TY_RE_DebugTree(ftxt); } token = TEXT_TY_RE_Node(no_packets++, cc, par1, par2, par3); if ((token-->RE_CCLASS == SUBEXP_RE_CC) && (token-->RE_PAR2 == 0)) { RE_Subexpressions-->(token-->RE_PAR1) = token; (RE_Subexpressions-->10)++; } if ((attach_to-->RE_CCLASS == SUBEXP_RE_CC or CHOICE_RE_CC or IF_RE_CC) && (attach_to-->RE_DOWN == NULL)) { attach_to-->RE_DOWN = token; token-->RE_UP = attach_to; } else { if ((token-->RE_CCLASS == CHOICE_RE_CC) && ((attach_to-->RE_UP)-->RE_CCLASS == CHOICE_RE_CC)) { no_packets--; token = attach_to-->RE_UP; } else { if (token-->RE_CCLASS == CHOICE_RE_CC) { while (attach_to-->RE_PREVIOUS ~= NULL) attach_to = attach_to-->RE_PREVIOUS; } if (token-->RE_CCLASS == QUANTIFIER_RE_CC or CHOICE_RE_CC) { token-->RE_PREVIOUS = attach_to-->RE_PREVIOUS; token-->RE_UP = attach_to-->RE_UP; if ((attach_to-->RE_UP ~= NULL) && (attach_to-->RE_PREVIOUS == NULL)) (attach_to-->RE_UP)-->RE_DOWN = token; token-->RE_DOWN = attach_to; bits = attach_to; while (bits ~= NULL) { bits-->RE_UP = token; bits = bits-->RE_NEXT; } attach_to-->RE_PREVIOUS = NULL; if (token-->RE_PREVIOUS ~= NULL) (token-->RE_PREVIOUS)-->RE_NEXT = token; } else { attach_to-->RE_NEXT = token; token-->RE_PREVIOUS = attach_to; token-->RE_UP = attach_to-->RE_UP; } } } if (token-->RE_CCLASS == CHOICE_RE_CC) { if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; token-->RE_NEXT = TEXT_TY_RE_Node(no_packets++, CHOICE_RE_CC, 0, 0, 0); (token-->RE_NEXT)-->RE_PREVIOUS = token; (token-->RE_NEXT)-->RE_UP = token-->RE_UP; token = token-->RE_NEXT; } attach_to = token; if (TEXT_TY_RE_Trace == 2) { print "Result:^"; TEXT_TY_RE_DebugTree(ftxt); } } if (blevel ~= 0) return "subexpression bracket mismatch"; if (exactly) { if (no_packets+3 > RE_MAX_PACKETS) return "regexp too complex"; exactly = RE_PACKET_space-->RE_DOWN; token = TEXT_TY_RE_Node(no_packets++, START_RE_CC, 0, 0, 0); RE_PACKET_space-->RE_DOWN = token; token-->RE_UP = RE_PACKET_space; attach_to = TEXT_TY_RE_Node(no_packets++, SUBEXP_RE_CC, -1, 3, 0); token-->RE_NEXT = attach_to; attach_to-->RE_PREVIOUS = token; attach_to-->RE_UP = RE_PACKET_space; attach_to-->RE_NEXT = TEXT_TY_RE_Node(no_packets++, END_RE_CC, 0, 0, 0); (attach_to-->RE_NEXT)-->RE_PREVIOUS = attach_to; (attach_to-->RE_NEXT)-->RE_UP = RE_PACKET_space; attach_to-->RE_DOWN = exactly; while (exactly ~= NULL) { exactly-->RE_UP = attach_to; exactly = exactly-->RE_NEXT; } } no_packets = TEXT_TY_RE_ExpandChoices(RE_PACKET_space, no_packets); if (TEXT_TY_RE_Trace) { print "Compiled pattern:^"; TEXT_TY_RE_DebugTree(ftxt); } bits = TEXT_TY_RE_CheckTree(RE_PACKET_space, no_subs); if (bits) return bits; return no_packets; ]; [ TEXT_TY_RE_RangeSyntaxCorrect ftxt rf rt i chm; for (i=rf: i= 'a') && (chm <= 'z')) || ((chm >= 'A') && (chm <= 'Z'))) { if (chm ~= 's' or 'S' or 'p' or 'P' or 'w' or 'W' or 'd' or 'D' or 'n' or 't' or 'l' or 'L' or 'u' or 'U') return "Invalid escape in {} range"; } } if ((i+2 BlkValueRead(ftxt, i+2)) return "Invalid {} range"; i=i+2; } } rfalse; ]; [ TEXT_TY_RE_ExpandChoices token no_packets rv prev nex holder new ct n cond_node then_node else_node; while (token ~= NULL) { if (token-->RE_CCLASS == IF_RE_CC) { if ((token-->RE_DOWN)-->RE_CCLASS == CHOICE_RE_CC) { for (nex=token-->RE_DOWN, n=0: nex~=NULL: nex=nex-->RE_NEXT) n++; if (n~=2) return "conditional has too many clauses"; if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; cond_node = TEXT_TY_RE_Node(no_packets++, CONDITION_RE_CC, 0, 0, 0); if (token-->RE_PAR1 >= 1) { cond_node-->RE_PAR1 = token-->RE_PAR1; } then_node = token-->RE_DOWN; then_node-->RE_CCLASS = THEN_RE_CC; else_node = then_node-->RE_NEXT; else_node-->RE_CCLASS = ELSE_RE_CC; if (cond_node-->RE_PAR1 < 1) { cond_node-->RE_DOWN = then_node-->RE_DOWN; then_node-->RE_DOWN = (then_node-->RE_DOWN)-->RE_NEXT; if (then_node-->RE_DOWN ~= NULL) (then_node-->RE_DOWN)-->RE_PREVIOUS = NULL; (cond_node-->RE_DOWN)-->RE_NEXT = NULL; (cond_node-->RE_DOWN)-->RE_UP = cond_node; } token-->RE_DOWN = cond_node; cond_node-->RE_UP = token; cond_node-->RE_NEXT = then_node; then_node-->RE_PREVIOUS = cond_node; } else { if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; cond_node = TEXT_TY_RE_Node(no_packets++, CONDITION_RE_CC, 0, 0, 0); if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; then_node = TEXT_TY_RE_Node(no_packets++, THEN_RE_CC, 0, 0, 0); if (token-->RE_PAR1 >= 1) { cond_node-->RE_PAR1 = token-->RE_PAR1; then_node-->RE_DOWN = token-->RE_DOWN; } else { cond_node-->RE_DOWN = token-->RE_DOWN; then_node-->RE_DOWN = (token-->RE_DOWN)-->RE_NEXT; (cond_node-->RE_DOWN)-->RE_NEXT = NULL; (cond_node-->RE_DOWN)-->RE_UP = cond_node; } token-->RE_DOWN = cond_node; cond_node-->RE_UP = token; cond_node-->RE_NEXT = then_node; then_node-->RE_PREVIOUS = cond_node; then_node-->RE_UP = token; then_node-->RE_NEXT = NULL; if (then_node-->RE_DOWN ~= NULL) (then_node-->RE_DOWN)-->RE_PREVIOUS = NULL; for (nex = then_node-->RE_DOWN: nex ~= NULL: nex = nex-->RE_NEXT) { nex-->RE_UP = then_node; } } if (cond_node-->RE_DOWN ~= NULL) { nex = cond_node-->RE_DOWN; if ((nex-->RE_CCLASS ~= SUBEXP_RE_CC) || (nex-->RE_NEXT ~= NULL) || (nex-->RE_PAR2 ~= 1 or 2)) { !TEXT_TY_RE_DebugSubtree(0, 0, nex, true); return "condition not lookahead/behind"; } } } if ((token-->RE_CCLASS == CHOICE_RE_CC) && (token-->RE_PAR1 < 1)) { prev = token-->RE_PREVIOUS; nex = token-->RE_NEXT; while ((nex ~= NULL) && (nex-->RE_CCLASS == CHOICE_RE_CC)) nex = nex-->RE_NEXT; holder = token-->RE_UP; if (holder == NULL) return "bang"; if (no_packets >= RE_MAX_PACKETS) return "regexp too complex"; new = TEXT_TY_RE_Node(no_packets++, DISJUNCTION_RE_CC, 0, 0, 0); holder-->RE_DOWN = new; new-->RE_UP = holder; if (prev ~= NULL) { prev-->RE_NEXT = new; new-->RE_PREVIOUS = prev; } if (nex ~= NULL) { nex-->RE_PREVIOUS = new; new-->RE_NEXT = nex; } new-->RE_DOWN = token; token-->RE_PREVIOUS = NULL; ct = 1; while (token ~= NULL) { token-->RE_PAR1 = ct++; token-->RE_UP = new; if ((token-->RE_NEXT ~= NULL) && ((token-->RE_NEXT)-->RE_CCLASS ~= CHOICE_RE_CC)) token-->RE_NEXT = NULL; token = token-->RE_NEXT; } new-->RE_PAR1 = ct-1; if (token ~= NULL) token-->RE_NEXT = NULL; token = new; continue; } if (token-->RE_DOWN ~= NULL) { no_packets = TEXT_TY_RE_ExpandChoices(token-->RE_DOWN, no_packets); if ((no_packets<0) || (no_packets >= RE_MAX_PACKETS)) break; } token = token-->RE_NEXT; } return no_packets; ]; [ TEXT_TY_RE_CheckTree token no_subs rv; while (token ~= NULL) { if (token-->RE_CCLASS == VARIABLE_RE_CC) { if (token-->RE_PAR1 >= no_subs) return "reference to nonexistent group"; } if ((token-->RE_CCLASS == SUBEXP_RE_CC) && (token-->RE_PAR2 == 1 or 2) && (token-->RE_PAR3 == -1)) { token-->RE_PAR3 = TEXT_TY_RE_Width(token-->RE_DOWN); if (token-->RE_PAR3 == -1) return "variable length lookbehind not implemented"; } if (token-->RE_DOWN ~= NULL) { rv = TEXT_TY_RE_CheckTree(token-->RE_DOWN, no_subs); if (rv) return rv; } token = token-->RE_NEXT; } rfalse; ]; [ TEXT_TY_RE_Width token downwards w rv aw choice; while (token ~= NULL) { switch (token-->RE_CCLASS) { DIGIT_RE_CC, NONDIGIT_RE_CC, WHITESPACE_RE_CC, NONWHITESPACE_RE_CC, PUNCTUATION_RE_CC, NONPUNCTUATION_RE_CC, WORD_RE_CC, NONWORD_RE_CC, ANYTHING_RE_CC, NOTHING_RE_CC, RANGE_RE_CC, NEWLINE_RE_CC, TAB_RE_CC, UCASE_RE_CC, NONUCASE_RE_CC, LCASE_RE_CC, NONLCASE_RE_CC: w++; START_RE_CC, END_RE_CC, BOUNDARY_RE_CC, NONBOUNDARY_RE_CC, ALWAYS_RE_CC: ; LITERAL_RE_CC: w = w + token-->RE_PAR2 - token-->RE_PAR1; VARIABLE_RE_CC: return -1; IF_RE_CC: rv = TEXT_TY_RE_Width((token-->RE_DOWN)-->RE_NEXT); if (rv == -1) return -1; if (rv ~= TEXT_TY_RE_Width(((token-->RE_DOWN)-->RE_NEXT)-->RE_NEXT)) return -1; w = w + rv; SUBEXP_RE_CC: if (token-->RE_PAR2 == 1 or 2) rv = 0; else { rv = TEXT_TY_RE_Width(token-->RE_DOWN); if (rv == -1) return -1; } w = w + rv; QUANTIFIER_RE_CC: if (token-->RE_PAR1 ~= token-->RE_PAR2) return -1; rv = TEXT_TY_RE_Width(token-->RE_DOWN); if (rv == -1) return -1; w = w + rv*(token-->RE_PAR1); DISJUNCTION_RE_CC: aw = -1; for (choice = token-->RE_DOWN: choice ~= NULL: choice = choice-->RE_NEXT) { rv = TEXT_TY_RE_Width(choice-->RE_DOWN); !print "Option found ", rv, "^"; if (rv == -1) return -1; if ((aw >= 0) && (aw ~= rv)) return -1; aw = rv; } w = w + aw; SENSITIVITY_RE_CC: ; } if (downwards) return w; if (token ~= NULL) token = token-->RE_NEXT; } return w; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Parser ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global TEXT_TY_RE_RewindCount; [ TEXT_TY_RE_PrintNoRewinds; print TEXT_TY_RE_RewindCount; ]; Constant CIS_MFLAG = 1; Constant ACCUM_MFLAG = 2; [ TEXT_TY_RE_Parse ftxt txt ipos insens ilen rv root i initial_mode; ilen = TEXT_TY_CharacterLength(txt); if ((ipos<0) || (ipos>ilen)) return -1; root = RE_PACKET_space; initial_mode = 0; if (insens) initial_mode = CIS_MFLAG; TEXT_TY_RE_Clear_Markers(RE_PACKET_space); for (:ipos<=ilen:ipos++) { if ((RE_PACKET_space-->RE_DOWN ~= NULL) && ((RE_PACKET_space-->RE_DOWN)-->RE_CCLASS == START_RE_CC) && (ipos>0)) { rv = -1; break; } if (ipos > 0) TEXT_TY_RE_EraseConstraints(RE_PACKET_space, initial_mode); TEXT_TY_RE_RewindCount = 0; rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ilen, RE_PACKET_space, initial_mode); if (rv >= 0) break; } if (rv == -1) { root-->RE_DATA1 = -1; root-->RE_DATA2 = -1; } else { root-->RE_DATA1 = ipos; root-->RE_DATA2 = ipos+rv; } return rv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Parse At Position ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_ParseAtPosition ftxt txt ifrom ito token mode_flags outcome ipos npos rv i ch edge rewind_this; if (ifrom > ito) return -1; ipos = ifrom; .Rewind; while (token ~= NULL) { outcome = false; if (TEXT_TY_RE_Trace) { print "Matching at ", ipos, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } if (iposRE_MODES = mode_flags; ! Save in case of backtrack switch (token-->RE_CCLASS) { ! Should never happen CHOICE_RE_CC: return "internal error"; ! Mode switches SENSITIVITY_RE_CC: if (token-->RE_PAR1) mode_flags = mode_flags | CIS_MFLAG; else mode_flags = mode_flags & (~CIS_MFLAG); outcome = true; ! Zero-length positional markers ALWAYS_RE_CC: outcome = true; NEVER_RE_CC: START_RE_CC: if (ipos == 0) outcome = true; END_RE_CC: if (BlkValueRead(txt, ipos) == 0) outcome = true; BOUNDARY_RE_CC: rv = 0; if (BlkValueRead(txt, ipos) == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (ipos == 0) ch = 0; else ch = BlkValueRead(txt, ipos-1); if (ch == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (rv == 1) outcome = true; NONBOUNDARY_RE_CC: rv = 0; if (BlkValueRead(txt, ipos) == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (ipos == 0) ch = 0; else ch = BlkValueRead(txt, ipos-1); if (ch == 0 or 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') rv++; if (rv ~= 1) outcome = true; ! Control constructs IF_RE_CC: i = token-->RE_PAR1; ch = false; if (TEXT_TY_RE_Trace) { print "Trying conditional from ", ipos, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } if (i >= 1) { if ((i10) && ((RE_Subexpressions-->i)-->RE_DATA1 >= 0)) ch = true; } else { rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito, (token-->RE_DOWN)-->RE_DOWN, mode_flags); if (rv >= 0) ch = true; } if (TEXT_TY_RE_Trace) { print "Condition found to be ", ch, "^"; } if (ch) { rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito, ((token-->RE_DOWN)-->RE_NEXT)-->RE_DOWN, mode_flags); !print "Then clause returned ", rv, "^"; } else { if ((((token-->RE_DOWN)-->RE_NEXT)-->RE_NEXT) == NULL) rv = 0; ! The empty else clause matches else rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito, (((token-->RE_DOWN)-->RE_NEXT)-->RE_NEXT)-->RE_DOWN, mode_flags); !print "Else clause returned ", rv, "^"; } if (rv >= 0) { outcome = true; ipos = ipos + rv; } DISJUNCTION_RE_CC: if (TEXT_TY_RE_Trace) { print "Trying disjunction from ", ipos, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } for (ch = token-->RE_DOWN: ch ~= NULL: ch = ch-->RE_NEXT) { if (ch-->RE_PAR1 <= token-->RE_CONSTRAINT) continue; if (TEXT_TY_RE_Trace) { print "Trying choice at ", ipos, ": "; TEXT_TY_RE_DebugNode(ch, ftxt, true); } rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito, ch-->RE_DOWN, mode_flags); if (rv >= 0) { token-->RE_DATA1 = ipos; ! Where match was made token-->RE_DATA2 = ch-->RE_PAR1; ! Option taken ipos = ipos + rv; outcome = true; if (TEXT_TY_RE_Trace) { print "Choice worked with width ", rv, ": "; TEXT_TY_RE_DebugNode(ch, ftxt, true); } break; } else { if (mode_flags & ACCUM_MFLAG == false) TEXT_TY_RE_FailSubexpressions(ch-->RE_DOWN); } } if (outcome == false) { if (TEXT_TY_RE_Trace) { print "Failed disjunction from ", ipos, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } token-->RE_DATA1 = ipos; ! Where match was tried token-->RE_DATA2 = -1; ! No option was taken } SUBEXP_RE_CC: if (token-->RE_PAR2 == 1 or 2) { npos = ipos - token-->RE_PAR3; if (npos<0) rv = -1; ! Lookbehind fails: nothing behind else rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, npos, ito, token-->RE_DOWN, mode_flags); } else { switch (token-->RE_PAR3) { 0: rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito, token-->RE_DOWN, mode_flags); 1: rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito, token-->RE_DOWN, mode_flags & (~CIS_MFLAG)); 2: rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, ipos, ito, token-->RE_DOWN, mode_flags | CIS_MFLAG); } } npos = ipos; if (rv >= 0) npos = ipos + rv; switch (token-->RE_PAR2) { 1: if (rv >= 0) rv = 0; 2: if (rv >= 0) rv = -1; else rv = 0; } if (rv >= 0) { token-->RE_DATA1 = ipos; ipos = ipos + rv; token-->RE_DATA2 = npos; outcome = true; } else { if (mode_flags & ACCUM_MFLAG == false) { token-->RE_DATA1 = -1; token-->RE_DATA2 = -1; } } if (token-->RE_PAR2 == 2) TEXT_TY_RE_FailSubexpressions(token, true); QUANTIFIER_RE_CC: token-->RE_DATA1 = ipos; if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_CACHE1 = -1; (token-->RE_DOWN)-->RE_CACHE2 = -1; } if (TEXT_TY_RE_Trace) { print "Trying quantifier from ", ipos, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } if (token-->RE_PAR3 == false) { ! Greedy quantifier !edge = ito; if (token-->RE_CONSTRAINT >= 0) edge = token-->RE_CONSTRAINT; edge = token-->RE_PAR2; if (token-->RE_CONSTRAINT >= 0) edge = token-->RE_CONSTRAINT; rv = -1; for (i=0, npos=ipos: iRE_DOWN, mode_flags | ACCUM_MFLAG); if (rv < 0) break; if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_CACHE1 = (token-->RE_DOWN)-->RE_DATA1; (token-->RE_DOWN)-->RE_CACHE2 = (token-->RE_DOWN)-->RE_DATA2; } if ((rv == 0) && (token-->RE_PAR2 == 30000) && (i>=1)) { i++; break; } npos = npos + rv; } if ((i >= token-->RE_PAR1) && (i <= token-->RE_PAR2)) outcome = true; } else { ! Lazy quantifier edge = token-->RE_PAR1; if (token-->RE_CONSTRAINT > edge) edge = token-->RE_CONSTRAINT; for (i=0, npos=ipos: (nposRE_PAR2): i++) { if (i >= edge) break; if (TEXT_TY_RE_Trace) { print "Trying quant rep ", i+1, " at ", npos, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } rv = TEXT_TY_RE_ParseAtPosition(ftxt, txt, npos, ito, token-->RE_DOWN, mode_flags | ACCUM_MFLAG); if (rv < 0) break; if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_CACHE1 = (token-->RE_DOWN)-->RE_DATA1; (token-->RE_DOWN)-->RE_CACHE2 = (token-->RE_DOWN)-->RE_DATA2; } if ((rv == 0) && (token-->RE_PAR2 == 30000) && (i>=1)) { i++; break; } npos = npos + rv; } if ((i >= edge) && (i <= token-->RE_PAR2)) outcome = true; } if (outcome) { if (token-->RE_PAR3 == false) { ! Greedy quantifier if (i > token-->RE_PAR1) { ! I.e., if we have been greedy token-->RE_DATA2 = i-1; ! And its edge limitation } else { token-->RE_DATA2 = -1; } } else { ! Lazy quantifier if (i < token-->RE_PAR2) { ! I.e., if we have been lazy token-->RE_DATA2 = i+1; ! And its edge limitation } else { token-->RE_DATA2 = -1; } } ipos = npos; if ((i == 0) && (mode_flags & ACCUM_MFLAG == false)) TEXT_TY_RE_FailSubexpressions(token-->RE_DOWN); if ((token-->RE_DOWN)-->RE_CCLASS == SUBEXP_RE_CC) { (token-->RE_DOWN)-->RE_DATA1 = (token-->RE_DOWN)-->RE_CACHE1; (token-->RE_DOWN)-->RE_DATA2 = (token-->RE_DOWN)-->RE_CACHE2; } if (TEXT_TY_RE_Trace) { print "Successful quant reps ", i, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } } else { !token-->RE_DATA2 = -1; if (mode_flags & ACCUM_MFLAG == false) TEXT_TY_RE_FailSubexpressions(token-->RE_DOWN); if (TEXT_TY_RE_Trace) { print "Failed quant reps ", i, ": "; TEXT_TY_RE_DebugNode(token, ftxt, true); } } ! Character classes NOTHING_RE_CC: ; ANYTHING_RE_CC: if (ch) outcome = true; ipos++; WHITESPACE_RE_CC: if (ch == 10 or 13 or 32 or 9) { outcome = true; ipos++; } NONWHITESPACE_RE_CC: if ((ch) && (ch ~= 10 or 13 or 32 or 9)) { outcome = true; ipos++; } PUNCTUATION_RE_CC: if (ch == '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') { outcome = true; ipos++; } NONPUNCTUATION_RE_CC: if ((ch) && (ch ~= '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}')) { outcome = true; ipos++; } WORD_RE_CC: if ((ch) && (ch ~= 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}')) { outcome = true; ipos++; } NONWORD_RE_CC: if (ch == 10 or 13 or 32 or 9 or '.' or ',' or '!' or '?' or '-' or '/' or '"' or ':' or ';' or '(' or ')' or '[' or ']' or '{' or '}') { outcome = true; ipos++; } DIGIT_RE_CC: if (ch == '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9') { outcome = true; ipos++; } NONDIGIT_RE_CC: if ((ch) && (ch ~= '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9')) { outcome = true; ipos++; } LCASE_RE_CC: if (CharIsOfCase(ch, 0)) { outcome = true; ipos++; } NONLCASE_RE_CC: if ((ch) && (CharIsOfCase(ch, 0) == false)) { outcome = true; ipos++; } UCASE_RE_CC: if (CharIsOfCase(ch, 1)) { outcome = true; ipos++; } NONUCASE_RE_CC: if ((ch) && (CharIsOfCase(ch, 1) == false)) { outcome = true; ipos++; } NEWLINE_RE_CC: if (ch == 10) { outcome = true; ipos++; } TAB_RE_CC: if (ch == 9) { outcome = true; ipos++; } RANGE_RE_CC: if (TEXT_TY_RE_Range(ch, ftxt, token-->RE_PAR1, token-->RE_PAR2, token-->RE_PAR3, mode_flags & CIS_MFLAG)) { outcome = true; ipos++; } ! Substring matches LITERAL_RE_CC: rv = TEXT_TY_RE_MatchSubstring(txt, ipos, ftxt, token-->RE_PAR1, token-->RE_PAR2, mode_flags & CIS_MFLAG); if (rv >= 0) { ipos = ipos + rv; outcome = true; } VARIABLE_RE_CC: i = token-->RE_PAR1; if ((RE_Subexpressions-->i)-->RE_DATA1 >= 0) { rv = TEXT_TY_RE_MatchSubstring(txt, ipos, txt, (RE_Subexpressions-->i)-->RE_DATA1, (RE_Subexpressions-->i)-->RE_DATA2, mode_flags & CIS_MFLAG); if (rv >= 0) { ipos = ipos + rv; outcome = true; } } .NeverMatchIncompleteVar; } if (outcome == false) { if (TEXT_TY_RE_RewindCount++ >= 10000) { if (TEXT_TY_RE_RewindCount == 10001) { style bold; print "OVERFLOW^"; style roman; } return -1; } if (TEXT_TY_RE_Trace) { print "Rewind sought from failure at pos ", ipos, " with: "; TEXT_TY_RE_DebugNode(token, ftxt, true); } if ((token-->RE_CCLASS == QUANTIFIER_RE_CC) && (TEXT_TY_RE_SeekBacktrack(token-->RE_DOWN, ftxt, false, ito, false))) jump RewindFound; if (mode_flags & ACCUM_MFLAG == false) TEXT_TY_RE_FailSubexpressions(token); token = token-->RE_PREVIOUS; while (token ~= NULL) { if (TEXT_TY_RE_SeekBacktrack(token, ftxt, true, ito, false)) { .RewindFound; ipos = token-->RE_DATA1; mode_flags = token-->RE_MODES; if (mode_flags & ACCUM_MFLAG == false) TEXT_TY_RE_FailSubexpressions(token, true); if (ipos == -1) TEXT_TY_RE_DebugTree(ftxt, true); if (TEXT_TY_RE_Trace) { print "^[", ifrom, ",", ito, "] rewinding to ", ipos, " at "; TEXT_TY_RE_DebugNode(token, ftxt, true); } jump Rewind; } token = token-->RE_PREVIOUS; } if (TEXT_TY_RE_Trace) print "^Rewind impossible^"; return -1; } token = token-->RE_NEXT; } return ipos - ifrom; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Backtracking ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_SeekBacktrack token ftxt downwards ito report_only untried; for (: token ~= NULL: token = token-->RE_NEXT) { if ((TEXT_TY_RE_Trace) && (report_only == false)) { print "Scan for rewind: "; TEXT_TY_RE_DebugNode(token, ftxt, true); } if ((token-->RE_CCLASS == SUBEXP_RE_CC) && (token-->RE_PAR2 == 1 or 2 or 4)) { if (downwards) rfalse; continue; } if (token-->RE_DOWN ~= NULL) { if ((TEXT_TY_RE_Trace) && (report_only == false)) print "Descend^"; if (TEXT_TY_RE_SeekBacktrack(token-->RE_DOWN, ftxt, false, ito, report_only)) rtrue; } untried = false; switch (token-->RE_CCLASS) { DISJUNCTION_RE_CC: if ((token-->RE_DATA2 >= 1) && (token-->RE_DATA2 < token-->RE_PAR1) && (token-->RE_CONSTRAINT < token-->RE_PAR1)) { ! Matched but earlier than last if (report_only) rtrue; if (token-->RE_CONSTRAINT == -1) token-->RE_CONSTRAINT = 1; else (token-->RE_CONSTRAINT)++; untried = true; } QUANTIFIER_RE_CC: if (token-->RE_CONSTRAINT ~= -2) { if ((TEXT_TY_RE_Trace) && (report_only == false)) { print "Quant with cons not -2: "; TEXT_TY_RE_DebugNode(token, ftxt, true); } if (token-->RE_DATA2 >= 0) { if (report_only) rtrue; token-->RE_CONSTRAINT = token-->RE_DATA2; untried = true; } } } if (untried) { if (TEXT_TY_RE_Trace) { print "Grounds for rewind at: "; TEXT_TY_RE_DebugNode(token, ftxt, true); } TEXT_TY_RE_EraseConstraints(token-->RE_NEXT); TEXT_TY_RE_EraseConstraints(token-->RE_DOWN); rtrue; } if (downwards) rfalse; } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Fail Subexpressions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_FailSubexpressions token downwards; for (: token ~= NULL: token = token-->RE_NEXT) { if (token-->RE_DOWN ~= NULL) TEXT_TY_RE_FailSubexpressions(token-->RE_DOWN); if (token-->RE_CCLASS == SUBEXP_RE_CC) { token-->RE_DATA1 = -1; token-->RE_DATA2 = -1; } if (downwards) break; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Erasing Constraints ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_EraseConstraints token; while (token ~= NULL) { switch (token-->RE_CCLASS) { DISJUNCTION_RE_CC: token-->RE_CONSTRAINT = -1; QUANTIFIER_RE_CC: token-->RE_CONSTRAINT = -1; } if (token-->RE_DOWN) TEXT_TY_RE_EraseConstraints(token-->RE_DOWN); token = token-->RE_NEXT; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Matching Literal Text ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_MatchSubstring txt ipos mtxt mfrom mto insens i ch; if (mfrom < 0) return 0; if (insens) for (i=mfrom:i= chm) && (ch <= upper)) rtrue; if (insens) { crev = TEXT_TY_RevCase(ch); if ((crev >= chm) && (crev <= upper)) rtrue; } i=i+2; } else { if (chm == ch) rtrue; if ((insens) && (chm == TEXT_TY_RevCase(ch))) rtrue; } } } rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Search And Replace ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_Replace_RE ftxtype txt ftxt rtxt insens exactly r p p1 p2 cp cp1 cp2; !print "Find: "; BlkValueDebug(ftxt); print "^"; !print "Rep: "; BlkValueDebug(rtxt); print "^"; !print "In: "; BlkValueDebug(txt); print "^"; if (rtxt == 0 or 1) { cp = txt-->0; p = TEXT_TY_Temporarily_Transmute(txt); } else TEXT_TY_Transmute(txt); cp1 = ftxt-->0; p1 = TEXT_TY_Temporarily_Transmute(ftxt); cp2 = rtxt-->0; p2 = TEXT_TY_Temporarily_Transmute(rtxt); r = TEXT_TY_Replace_REI(ftxtype, txt, ftxt, rtxt, insens, exactly); TEXT_TY_Untransmute(ftxt, p1, cp1); TEXT_TY_Untransmute(rtxt, p2, cp2); if (rtxt == 0 or 1) TEXT_TY_Untransmute(txt, p, cp); return r; ]; [ TEXT_TY_Replace_REI ftxtype txt ftxt rtxt insens exactly ctxt csize ilen i cl mpos cpos ch chm; ilen = TEXT_TY_CharacterLength(txt); TEXT_TY_RE_Err = 0; switch (ftxtype) { REGEXP_BLOB: i = TEXT_TY_RE_CompileTree(ftxt, exactly); CHR_BLOB: i = TEXT_TY_CHR_CompileTree(ftxt, exactly); default: "*** bad ftxtype ***"; } if ((i<0) || (i>RE_MAX_PACKETS)) { TEXT_TY_RE_Err = i; print "*** Regular expression error: ", (string) TEXT_TY_RE_Err, " ***^"; RunTimeProblem(RTP_REGEXPSYNTAXERROR); return 0; } if (TEXT_TY_RE_Trace) { TEXT_TY_RE_DebugTree(ftxt); print "(compiled to ", i, " packets)^"; } if (ftxtype == REGEXP_BLOB) TEXT_TY_RE_EmptyMatchVars(); mpos = 0; chm = 0; cpos = 0; while (TEXT_TY_RE_Parse(ftxt, txt, mpos, insens) >= 0) { chm++; if (TEXT_TY_RE_Trace) { print "^*** Match ", chm, " found (", RE_PACKET_space-->RE_DATA1, ",", RE_PACKET_space-->RE_DATA2, "): "; if (RE_PACKET_space-->RE_DATA1 == RE_PACKET_space-->RE_DATA2) { print ""; } for (i=RE_PACKET_space-->RE_DATA1:iRE_DATA2:i++) { print (char) BlkValueRead(txt, i); } print " ***^"; } if (rtxt == 0) break; ! Accept only one match, replace nothing if (rtxt ~= 0 or 1) { if (chm == 1) { ctxt = BlkValueCreate(TEXT_TY); TEXT_TY_Transmute(ctxt); csize = BlkValueLBCapacity(ctxt); } for (i=cpos:iRE_DATA1:i++) { ch = BlkValueRead(txt, i); if (cl+1 >= csize) { if (BlkValueSetLBCapacity(ctxt, 2*cl) == false) break; csize = BlkValueLBCapacity(ctxt); } BlkValueWrite(ctxt, cl++, ch); } BlkValueWrite(ctxt, cl, 0); TEXT_TY_Concatenate(ctxt, rtxt, ftxtype, txt); csize = BlkValueLBCapacity(ctxt); cl = TEXT_TY_CharacterLength(ctxt); } mpos = RE_PACKET_space-->RE_DATA2; cpos = mpos; if (RE_PACKET_space-->RE_DATA1 == RE_PACKET_space-->RE_DATA2) mpos++; if (TEXT_TY_RE_Trace) { if (chm == 100) { ! Purely to keep the output from being excessive print "(Stopping after 100 matches.)^"; break; } } } if (chm > 0) { if (rtxt ~= 0 or 1) { for (i=cpos:i= csize) { if (BlkValueSetLBCapacity(ctxt, 2*cl) == false) break; csize = BlkValueLBCapacity(ctxt); } BlkValueWrite(ctxt, cl++, ch); } } if (ftxtype == REGEXP_BLOB) { TEXT_TY_RE_CreateMatchVars(txt); if (TEXT_TY_RE_Trace) TEXT_TY_RE_DebugMatchVars(txt); } if (rtxt ~= 0 or 1) { BlkValueWrite(ctxt, cl, 0); BlkValueCopy(txt, ctxt); BlkValueFree(ctxt); } } return chm; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RegExp.i6t: Concatenation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TEXT_TY_RE_Concatenate txt_to txt_from blobtype txt_ref pos len ch i tosize x y case; if ((txt_to==0) || (BlkValueWeakKind(txt_to) ~= TEXT_TY)) rfalse; if ((txt_from==0) || (BlkValueWeakKind(txt_from) ~= TEXT_TY)) return txt_to; pos = TEXT_TY_CharacterLength(txt_to); tosize = BlkValueLBCapacity(txt_to); len = TEXT_TY_CharacterLength(txt_from); for (i=0:i= 0) ch = BlkValueRead(txt_from, ++i); if ((ch >= '0') && (ch <= '9')) { ch = ch - '0'; if (ch < RE_Subexpressions-->10) { x = (RE_Subexpressions-->ch)-->RE_DATA1; y = (RE_Subexpressions-->ch)-->RE_DATA2; if (x >= 0) { for (:x= tosize) { if (BlkValueSetLBCapacity(txt_to, 2*tosize) == false) break; tosize = BlkValueLBCapacity(txt_to); } if (case >= 0) BlkValueWrite(txt_to, pos++, CharToCase(ch, case)); else BlkValueWrite(txt_to, pos++, ch); } } } continue; } } if (pos+1 >= tosize) { if (BlkValueSetLBCapacity(txt_to, 2*tosize) == false) break; tosize = BlkValueLBCapacity(txt_to); } BlkValueWrite(txt_to, pos++, ch); } BlkValueWrite(txt_to, pos, 0); return txt_to; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Block Format ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant STORA_ACTION_F = 0; Constant STORA_NOUN_F = 1; Constant STORA_SECOND_F = 2; Constant STORA_ACTOR_F = 3; Constant STORA_REQUEST_F = 4; Constant STORA_COMMAND_TEXT_F = 5; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: KOV Support ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: return STORED_ACTION_TY_Create(arg2); DESTROY_KOVS: STORED_ACTION_TY_Destroy(arg1); MAKEMUTABLE_KOVS: return 1; COPYQUICK_KOVS: rtrue; COPYSB_KOVS: BlkValueCopySB1(arg1, arg2); KINDDATA_KOVS: return 0; EXTENT_KOVS: return 6; COPY_KOVS: STORED_ACTION_TY_Copy(arg1, arg2); COMPARE_KOVS: return STORED_ACTION_TY_Compare(arg1, arg2); HASH_KOVS: return STORED_ACTION_TY_Hash(arg1); DEBUG_KOVS: print " = ", (STORED_ACTION_TY_Say) arg1; } ! We choose not to respond to: CAST_KOVS, COPYKIND_KOVS, READ_FILE_KOVS, WRITE_FILE_KOVS rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Creation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Create sb stora; stora = FlexAllocate(6*WORDSIZE, STORED_ACTION_TY, BLK_FLAG_WORD); BlkValueWrite(stora, STORA_ACTION_F, ##Wait, true); ! action BlkValueWrite(stora, STORA_NOUN_F, 0, true); ! noun BlkValueWrite(stora, STORA_SECOND_F, 0, true); ! second BlkValueWrite(stora, STORA_ACTOR_F, player, true); ! actor BlkValueWrite(stora, STORA_REQUEST_F, false, true); ! whether a request BlkValueWrite(stora, STORA_COMMAND_TEXT_F, 0, true); ! text of command if necessary, 0 if not return BlkValueCreateSB1(sb, stora); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Setting Up ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_New a n s ac req stora; if (stora == 0) stora = BlkValueCreate(STORED_ACTION_TY); BlkValueWrite(stora, STORA_ACTION_F, a); BlkValueWrite(stora, STORA_NOUN_F, n); BlkValueWrite(stora, STORA_SECOND_F, s); BlkValueWrite(stora, STORA_ACTOR_F, ac); BlkValueWrite(stora, STORA_REQUEST_F, req); BlkValueWrite(stora, STORA_COMMAND_TEXT_F, 0); return stora; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Destruction ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Destroy stora toc; toc = BlkValueRead(stora, STORA_COMMAND_TEXT_F); if (toc) BlkValueFree(toc); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Copying ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Copy storato storafrom tocfrom tocto; tocfrom = BlkValueRead(storafrom, STORA_COMMAND_TEXT_F); if (tocfrom == 0) return; tocto = BlkValueCreate(TEXT_TY); BlkValueCopy(tocto, tocfrom); BlkValueWrite(storato, STORA_COMMAND_TEXT_F, tocto); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Comparison ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Compare storaleft storaright delta itleft itright; delta = BlkValueRead(storaleft, STORA_ACTION_F) - BlkValueRead(storaright, STORA_ACTION_F); if (delta) return delta; delta = BlkValueRead(storaleft, STORA_NOUN_F) - BlkValueRead(storaright, STORA_NOUN_F); if (delta) return delta; delta = BlkValueRead(storaleft, STORA_SECOND_F) - BlkValueRead(storaright, STORA_SECOND_F); if (delta) return delta; delta = BlkValueRead(storaleft, STORA_ACTOR_F) - BlkValueRead(storaright, STORA_ACTOR_F); if (delta) return delta; delta = BlkValueRead(storaleft, STORA_REQUEST_F) - BlkValueRead(storaright, STORA_REQUEST_F); if (delta) return delta; itleft = BlkValueRead(storaleft, STORA_COMMAND_TEXT_F); itright = BlkValueRead(storaright, STORA_COMMAND_TEXT_F); if ((itleft ~= 0) && (itright ~= 0)) return TEXT_TY_Support(COMPARE_KOVS, itleft, itright); return itleft - itright; ]; [ STORED_ACTION_TY_Distinguish stora1 stora2; if (STORED_ACTION_TY_Compare(stora1, stora2) == 0) rfalse; rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Hashing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Hash stora rv it; rv = BlkValueRead(stora, STORA_ACTION_F); rv = rv * 33 + BlkValueRead(stora, STORA_NOUN_F); rv = rv * 33 + BlkValueRead(stora, STORA_SECOND_F); rv = rv * 33 + BlkValueRead(stora, STORA_ACTOR_F); rv = rv * 33 + BlkValueRead(stora, STORA_REQUEST_F); it = BlkValueRead(stora, STORA_COMMAND_TEXT_F); if (it ~= 0) rv = rv * 33 + TEXT_TY_Support(HASH_KOVS, it); return rv; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Printing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Say stora text_of_command saved_command saved_pn saved_action K1 K2 at cf cw; if ((stora==0) || (BlkValueWeakKind(stora) ~= STORED_ACTION_TY)) return; text_of_command = BlkValueRead(stora, STORA_COMMAND_TEXT_F); if (text_of_command) { saved_command = BlkValueCreate(TEXT_TY); BlkValueCast(saved_command, SNIPPET_TY, players_command); SetPlayersCommand(text_of_command); } saved_pn = parsed_number; saved_action = action; action = BlkValueRead(stora, STORA_ACTION_F); cf = consult_from; cw = consult_words; at = FindAction(-1); K1 = ActionData-->(at+AD_NOUN_KOV); K2 = ActionData-->(at+AD_SECOND_KOV); if (K1 ~= OBJECT_TY) { parsed_number = BlkValueRead(stora, STORA_NOUN_F); if ((K1 == UNDERSTANDING_TY) && (text_of_command == 0)) { if (saved_command == 0) saved_command = BlkValueCreate(TEXT_TY); BlkValueCast(saved_command, SNIPPET_TY, players_command); text_of_command = BlkValueCreate(TEXT_TY); BlkValueCopy(text_of_command, parsed_number); SetPlayersCommand(text_of_command); parsed_number = players_command; consult_from = parsed_number/100; consult_words = parsed_number%100; } } if (K2 ~= OBJECT_TY) { parsed_number = BlkValueRead(stora, STORA_SECOND_F); if ((K2 == UNDERSTANDING_TY) && (text_of_command == 0)) { if (saved_command == 0) saved_command = BlkValueCreate(TEXT_TY); BlkValueCast(saved_command, SNIPPET_TY, players_command); text_of_command = BlkValueCreate(TEXT_TY); BlkValueCopy(text_of_command, parsed_number); SetPlayersCommand(text_of_command); parsed_number = players_command; consult_from = parsed_number/100; consult_words = parsed_number%100; } } DB_Action( BlkValueRead(stora, STORA_ACTOR_F), BlkValueRead(stora, STORA_REQUEST_F), BlkValueRead(stora, STORA_ACTION_F), BlkValueRead(stora, STORA_NOUN_F), BlkValueRead(stora, STORA_SECOND_F), true); parsed_number = saved_pn; action = saved_action; consult_from = cf; consult_words = cw; if (text_of_command) { SetPlayersCommand(saved_command); BlkValueFree(saved_command); } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Involvement ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Involves stora item at; at = FindAction(BlkValueRead(stora, STORA_ACTION_F)); if (at) { if ((ActionData-->(at+AD_NOUN_KOV) == OBJECT_TY) && (BlkValueRead(stora, STORA_NOUN_F) == item)) rtrue; if ((ActionData-->(at+AD_SECOND_KOV) == OBJECT_TY) && (BlkValueRead(stora, STORA_SECOND_F) == item)) rtrue; } if (BlkValueRead(stora, STORA_ACTOR_F) == item) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Nouns ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Part stora ind at ado; if (ind == STORA_NOUN_F or STORA_SECOND_F) { if (ind == STORA_NOUN_F) ado = AD_NOUN_KOV; else ado = AD_SECOND_KOV; at = FindAction(BlkValueRead(stora, STORA_ACTION_F)); if ((at) && (ActionData-->(at+ado) == OBJECT_TY)) return BlkValueRead(stora, ind); return nothing; } return BlkValueRead(stora, ind); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Pattern Matching ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Array SAT_Tmp-->7; [ STORED_ACTION_TY_Adopt stora at; SAT_Tmp-->1 = action; SAT_Tmp-->2 = noun; SAT_Tmp-->3 = second; SAT_Tmp-->4 = actor; SAT_Tmp-->5 = act_requester; SAT_Tmp-->6 = parsed_number; action = BlkValueRead(stora, STORA_ACTION_F); at = FindAction(-1); if (ActionData-->(at+AD_NOUN_KOV) == OBJECT_TY) noun = BlkValueRead(stora, STORA_NOUN_F); else { parsed_number = BlkValueRead(stora, STORA_NOUN_F); noun = nothing; } if (ActionData-->(at+AD_SECOND_KOV) == OBJECT_TY) second = BlkValueRead(stora, STORA_SECOND_F); else { parsed_number = BlkValueRead(stora, STORA_SECOND_F); second = nothing; } actor = BlkValueRead(stora, STORA_ACTOR_F); if (BlkValueRead(stora, STORA_REQUEST_F)) act_requester = player; else act_requester = nothing; ]; [ STORED_ACTION_TY_Unadopt; action = SAT_Tmp-->1; noun = SAT_Tmp-->2; second = SAT_Tmp-->3; actor = SAT_Tmp-->4; act_requester = SAT_Tmp-->5; parsed_number = SAT_Tmp-->6; return SAT_Tmp-->0; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Current Action ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Current stora at text_of_command; if ((stora==0) || (BlkValueWeakKind(stora) ~= STORED_ACTION_TY)) return 0; BlkValueWrite(stora, STORA_ACTION_F, action); at = FindAction(-1); if (ActionData-->(at+AD_NOUN_KOV) == OBJECT_TY) BlkValueWrite(stora, STORA_NOUN_F, noun); else BlkValueWrite(stora, STORA_NOUN_F, parsed_number); if (ActionData-->(at+AD_SECOND_KOV) == OBJECT_TY) BlkValueWrite(stora, STORA_SECOND_F, second); else BlkValueWrite(stora, STORA_SECOND_F, parsed_number); BlkValueWrite(stora, STORA_ACTOR_F, actor); if (act_requester) BlkValueWrite(stora, STORA_REQUEST_F, true); else BlkValueWrite(stora, STORA_REQUEST_F, false); if ((at) && ((ActionData-->(at+AD_NOUN_KOV) == UNDERSTANDING_TY) || (ActionData-->(at+AD_SECOND_KOV) == UNDERSTANDING_TY))) { text_of_command = BlkValueRead(stora, STORA_COMMAND_TEXT_F); if (text_of_command == 0) { text_of_command = BlkValueCreate(TEXT_TY); BlkValueWrite(stora, STORA_COMMAND_TEXT_F, text_of_command); } BlkValueCast(text_of_command, SNIPPET_TY, players_command); } else BlkValueWrite(stora, STORA_COMMAND_TEXT_F, 0); return stora; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! StoredAction.i6t: Trying ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ STORED_ACTION_TY_Try stora ks text_of_command saved_command; if ((stora==0) || (BlkValueWeakKind(stora) ~= STORED_ACTION_TY)) return; if (ks) { @push keep_silent; keep_silent=1; } text_of_command = BlkValueRead(stora, STORA_COMMAND_TEXT_F); if (text_of_command) { saved_command = BlkValueCreate(TEXT_TY); BlkValueCast(saved_command, SNIPPET_TY, players_command); SetPlayersCommand(text_of_command); } TryAction( BlkValueRead(stora, STORA_REQUEST_F), BlkValueRead(stora, STORA_ACTOR_F), BlkValueRead(stora, STORA_ACTION_F), BlkValueRead(stora, STORA_NOUN_F), BlkValueRead(stora, STORA_SECOND_F)); if (text_of_command) { SetPlayersCommand(saved_command); BlkValueFree(saved_command); } if (ks) { @pull keep_silent; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Block Format ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant LIST_ITEM_KOV_F = 0; ! The kind of the items Constant LIST_LENGTH_F = 1; ! The number of items Constant LIST_ITEM_BASE = 2; ! List items begin at this entry ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: KOV Support ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_OF_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: return LIST_OF_TY_Create(arg1, arg2); DESTROY_KOVS: LIST_OF_TY_Destroy(arg1); MAKEMUTABLE_KOVS: return 1; COPYKIND_KOVS: return LIST_OF_TY_CopyKind(arg1, arg2); COPYQUICK_KOVS: return LIST_OF_TY_QuickCopy(arg1, arg2); COPYSB_KOVS: BlkValueCopySB1(arg1, arg2); KINDDATA_KOVS: return LIST_OF_TY_KindData(arg1, arg2); EXTENT_KOVS: return BlkValueRead(arg1, LIST_LENGTH_F) + LIST_ITEM_BASE; COPY_KOVS: LIST_OF_TY_Copy(arg1, arg2, arg3); COMPARE_KOVS: return LIST_OF_TY_Compare(arg1, arg2); HASH_KOVS: return LIST_OF_TY_Hash(arg1); DEBUG_KOVS: print " = {", (LIST_OF_TY_Say) arg1, "} of kind ", BlkValueRead(arg1, LIST_ITEM_KOV_F); } ! We choose not to respond to: CAST_KOVS, READ_FILE_KOVS, WRITE_FILE_KOVS rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Creation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_OF_TY_Create skov sb list; skov = KindBaseTerm(skov, 0); list = FlexAllocate(27*WORDSIZE, LIST_OF_TY, BLK_FLAG_MULTIPLE + BLK_FLAG_WORD); BlkValueWrite(list, LIST_ITEM_KOV_F, skov, true); BlkValueWrite(list, LIST_LENGTH_F, 0, true); sb = BlkValueCreateSB1(sb, list); return sb; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Destruction ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_OF_TY_Destroy list no_items i k; k = BlkValueRead(list, LIST_ITEM_KOV_F); if (KOVIsBlockValue(k)) { no_items = BlkValueRead(list, LIST_LENGTH_F); for (i=0: i ex) { if (BlkValueSetLBCapacity(list, len+LIST_ITEM_BASE) == false) return 0; } if (kov) BlkValueWrite(list, LIST_ITEM_KOV_F, kov); else BlkValueWrite(list, LIST_ITEM_KOV_F, OBJECT_TY); BlkValueWrite(list, LIST_LENGTH_F, len); obj = 0; for (i=0: i no_items+1))) { print "*** Couldn't add at entry ", posn, " in the list "; LIST_OF_TY_Say(list, true); print ", which has entries in the range 1 to ", no_items, " ***^"; RunTimeProblem(RTP_LISTRANGEERROR); rfalse; } ex = BlkValueLBCapacity(list); if (no_items+LIST_ITEM_BASE+1 > ex) { if (BlkValueSetLBCapacity(list, ex+16) == false) return 0; } if (KOVIsBlockValue(contents_kind)) { nv = BlkValueCreate(contents_kind); BlkValueCopy(nv, v); v = nv; } if (posnflag) { posn--; for (i=no_items:i>posn:i--) { BlkValueWrite(list, i+LIST_ITEM_BASE, BlkValueRead(list, i-1+LIST_ITEM_BASE)); } BlkValueWrite(list, posn+LIST_ITEM_BASE, v); } else { BlkValueWrite(list, no_items+LIST_ITEM_BASE, v); } BlkValueWrite(list, LIST_LENGTH_F, no_items+1); return list; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Append List ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_OF_TY_AppendList list more posnflag posn nodups v i j no_items msize ex nv; if ((list==0) || (BlkValueWeakKind(list) ~= LIST_OF_TY)) return false; if ((more==0) || (BlkValueWeakKind(more) ~= LIST_OF_TY)) return list; no_items = BlkValueRead(list, LIST_LENGTH_F); BlkValueWrite(list, LIST_LENGTH_F, no_items); ! Forces the list to be mutable if ((posnflag) && ((posn<1) || (posn > no_items+1))) { print "*** Couldn't add at entry ", posn, " in the list "; LIST_OF_TY_Say(list, true); print ", which has entries in the range 1 to ", no_items, " ***^"; RunTimeProblem(RTP_LISTRANGEERROR); rfalse; } msize = BlkValueRead(more, LIST_LENGTH_F); ex = BlkValueLBCapacity(list); if (no_items+msize+LIST_ITEM_BASE > ex) { if (BlkValueSetLBCapacity(list, no_items+msize+LIST_ITEM_BASE+8) == false) return 0; } if (posnflag) { posn--; for (i=no_items+msize:i>=posn+msize:i--) { BlkValueWrite(list, i+LIST_ITEM_BASE, BlkValueRead(list, i-msize+LIST_ITEM_BASE)); } ! BlkValueWrite(list, posn, v); for (j=0: j to) || (from <= 0) || (to > no_items)) { if (forgive) { if (from <= 0) from = 1; if (to >= no_items) to = no_items; if (from > to) return list; } else { print "*** Couldn't remove entries ", from, " to ", to, " from the list "; LIST_OF_TY_Say(list, true); print ", which has entries in the range 1 to ", no_items, " ***^"; RunTimeProblem(RTP_LISTRANGEERROR); rfalse; } } to--; from--; d = to-from+1; if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) for (i=0: i ex) { if (BlkValueSetLBCapacity(list, newsize+LIST_ITEM_BASE) == false) return 0; } dv = DefaultValueOfKOV(BlkValueRead(list, LIST_ITEM_KOV_F)); for (i=no_items: i newsize) { if (this_way_only == 1) return list; if (truncation_end == -1) { if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) for (i=0: ino_items)) { if (forgive) return false; print "*** Couldn't read from entry ", i, " of a list which"; switch (no_items) { 0: print " is empty ***^"; 1: print " has only one entry, numbered 1 ***^"; default: print " has entries numbered from 1 to ", no_items, " ***^"; } RunTimeProblem(RTP_LISTRANGEERROR); if (no_items >= 1) i = 1; else return false; } return BlkValueRead(list, LIST_ITEM_BASE+i-1); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Write Item ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ WriteLIST_OF_TY_GetItem list i val no_items; if ((list==0) || (BlkValueWeakKind(list) ~= LIST_OF_TY)) return false; no_items = BlkValueRead(list, LIST_LENGTH_F); if ((i<=0) || (i>no_items)) { print "*** Couldn't write to list entry ", i, " of a list which"; switch (no_items) { 0: print " is empty ***^"; 1: print " has only one entry, numbered 1 ***^"; default: print " has entries numbered from 1 to ", no_items, " ***^"; } return RunTimeProblem(RTP_LISTRANGEERROR); } BlkValueWrite(list, LIST_ITEM_BASE+i-1, val); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Put Item ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_OF_TY_PutItem list i v no_items nv; if ((list==0) || (BlkValueWeakKind(list) ~= LIST_OF_TY)) return false; no_items = BlkValueRead(list, LIST_LENGTH_F); if (KOVIsBlockValue(BlkValueRead(list, LIST_ITEM_KOV_F))) { nv = BlkValueCreate(BlkValueRead(list, LIST_ITEM_KOV_F)); BlkValueCopy(nv, v); v = nv; } if ((i<=0) || (i>no_items)) return false; BlkValueWrite(list, LIST_ITEM_BASE+i-1, v); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Multiple Object List ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_OF_TY_Mol list len i; if ((list==0) || (BlkValueWeakKind(list) ~= LIST_OF_TY)) return 0; len = multiple_object-->0; LIST_OF_TY_SetLength(list, len); for (i=1: i<=len: i++) LIST_OF_TY_PutItem(list, i, multiple_object-->i); return list; ]; [ LIST_OF_TY_Set_Mol list len i; if ((list==0) || (BlkValueWeakKind(list) ~= LIST_OF_TY)) return 0; len = BlkValueRead(list, LIST_LENGTH_F); if (len > 63) len = 63; multiple_object-->0 = len; for (i=1: i<=len: i++) multiple_object-->i = BlkValueRead(list, LIST_ITEM_BASE+i-1); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Reversing ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ LIST_OF_TY_Reverse list no_items i v; if ((list==0) || (BlkValueWeakKind(list) ~= LIST_OF_TY)) return 0; no_items = BlkValueRead(list, LIST_LENGTH_F); if (no_items < 2) return list; for (i=0:i*20:i--) BlkValueWrite(list, LIST_ITEM_BASE+i, BlkValueRead(list, LIST_ITEM_BASE+i-1)); BlkValueWrite(list, LIST_ITEM_BASE, v); } return list; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Lists.i6t: Sorting ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Global LIST_OF_TY_Sort_cf; [ LIST_OF_TY_Sort list dir prop cf i j no_items v; BlkMakeMutable(list); no_items = BlkValueRead(list, LIST_LENGTH_F); if (dir == 2) { if (no_items < 2) return; for (i=1:i j) return 1; if (i < j) return -1; return 0; } else return cf(i, j); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Combinations.i6t: Block Format ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant COMBINATION_KIND_F = 0; ! Strong kind ID Constant COMBINATION_ITEM_BASE = 1; ! List items begin at this entry ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Combinations.i6t: KOV Support ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ COMBINATION_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: return COMBINATION_TY_Create(arg1, arg2); DESTROY_KOVS: COMBINATION_TY_Destroy(arg1); MAKEMUTABLE_KOVS: return 1; COPYKIND_KOVS: return COMBINATION_TY_CopyKind(arg1, arg2); COPYQUICK_KOVS: rtrue; COPYSB_KOVS: BlkValueCopySB1(arg1, arg2); KINDDATA_KOVS: return COMBINATION_TY_KindData(arg1); EXTENT_KOVS: return -1; COPY_KOVS: COMBINATION_TY_Copy(arg1, arg2, arg3); COMPARE_KOVS: return COMBINATION_TY_Compare(arg1, arg2); HASH_KOVS: return COMBINATION_TY_Hash(arg1); DEBUG_KOVS: print " = ", (COMBINATION_TY_Say) arg1; } ! We choose not to respond to: CAST_KOVS, READ_FILE_KOVS, WRITE_FILE_KOVS rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Combinations.i6t: Creation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ COMBINATION_TY_Create kind sb long_block N i bk v; N = KindBaseArity(kind); long_block = FlexAllocate( (COMBINATION_ITEM_BASE+N)*WORDSIZE, COMBINATION_TY, BLK_FLAG_WORD); BlkValueWrite(long_block, COMBINATION_KIND_F, kind, true); for (i=0: i0) print ", "; bk = KindBaseTerm(kind, i); v = BlkValueRead(comb, i+COMBINATION_ITEM_BASE); if (bk == LIST_OF_TY) LIST_OF_TY_Say(v, 1); else PrintKindValuePair(bk, v); } print ")"; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Block Format ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RRV_NAME RR_NAME-5; ! Packed string, e.g. "containment relation" Constant RRV_PERMISSIONS RR_PERMISSIONS-5; ! A bitmap of what operations this supports Constant RRV_STORAGE RR_STORAGE-5; ! Data location, depending on format Constant RRV_KIND RR_KIND-5; ! Strong kind ID of the relation Constant RRV_HANDLER RR_HANDLER-5; ! Routine to perform operations on this Constant RRV_DESCRIPTION RR_DESCRIPTION-5; ! Packed string, e.g. "contains" Constant RRV_USED 6; Constant RRV_FILLED 7; Constant RRV_DATA_BASE 8; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: KOV Support ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RELATION_TY_Support task arg1 arg2 arg3; switch(task) { CREATE_KOVS: return RELATION_TY_Create(arg1, 0, arg2); DESTROY_KOVS: RELATION_TY_Destroy(arg1); MAKEMUTABLE_KOVS: return 1; COPYQUICK_KOVS: rtrue; COPYSB_KOVS: BlkValueCopySB1(arg1, arg2); KINDDATA_KOVS: return 0; EXTENT_KOVS: return -1; COPY_KOVS: RELATION_TY_Copy(arg1, arg2); COMPARE_KOVS: return RELATION_TY_Compare(arg1, arg2); HASH_KOVS: return arg1; DEBUG_KOVS: print " = ", (RELATION_TY_Say) arg1; } ! We choose not to respond to: CAST_KOVS, COPYKIND_KOVS, READ_FILE_KOVS, WRITE_FILE_KOVS rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Other Definitions ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! valencies Constant RRVAL_V_TO_V 0; Constant RRVAL_V_TO_O RELS_Y_UNIQUE; Constant RRVAL_O_TO_V RELS_X_UNIQUE; Constant RRVAL_O_TO_O RELS_X_UNIQUE+RELS_Y_UNIQUE; Constant RRVAL_EQUIV RELS_EQUIVALENCE+RELS_SYMMETRIC; Constant RRVAL_SYM_V_TO_V RELS_SYMMETRIC; Constant RRVAL_SYM_O_TO_O RELS_SYMMETRIC+RELS_X_UNIQUE+RELS_Y_UNIQUE; ! dictionary entry flags Constant RRF_USED $0001; ! entry contains a value Constant RRF_DELETED $0002; ! entry used to contain a value Constant RRF_SINGLE $0004; ! entry's Y is a value, not a list Constant RRF_HASX $0010; ! 2-in-1 entry contains a corresponding key Constant RRF_HASY $0020; ! 2-in-1 entry contains a corresponding value Constant RRF_ENTKEYX $0040; ! 2-in-1 entry key is left side KOV Constant RRF_ENTKEYY $0080; ! 2-in-1 entry key is right side KOV ! permission/task constants (those commented out here are generated by I7) !Constant RELS_SYMMETRIC $8000; !Constant RELS_EQUIVALENCE $4000; !Constant RELS_X_UNIQUE $2000; !Constant RELS_Y_UNIQUE $1000; !Constant RELS_TEST $0800; !Constant RELS_ASSERT_TRUE $0400; !Constant RELS_ASSERT_FALSE $0200; !Constant RELS_SHOW $0100; !Constant RELS_ROUTE_FIND $0080; !Constant RELS_ROUTE_FIND_COUNT $0040; Constant RELS_COPY $0020; Constant RELS_DESTROY $0010; !Constant RELS_LOOKUP_ANY $0008; !Constant RELS_LOOKUP_ALL_X $0004; !Constant RELS_LOOKUP_ALL_Y $0002; !Constant RELS_LIST $0001; Constant RELS_EMPTY $0003; Constant RELS_SET_VALENCY $0005; ! RELS_LOOKUP_ANY mode selection constants Constant RLANY_GET_X 1; Constant RLANY_GET_Y 2; Constant RLANY_CAN_GET_X 3; Constant RLANY_CAN_GET_Y 4; ! RELS_LIST mode selection constant Constant RLIST_ALL_X 1; Constant RLIST_ALL_Y 2; Constant RLIST_ALL_PAIRS 3; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Tunable Parameters ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== Constant RRP_MIN_SIZE 8; ! minimum number of entries (DO NOT CHANGE) Constant RRP_PERTURB_SHIFT 5; ! affects the probe sequence Constant RRP_RESIZE_SMALL 4; ! resize factor for small tables Constant RRP_RESIZE_LARGE 2; ! resize factor for large tables Constant RRP_LARGE_IS 256; ! how many entries make a table "large"? Constant RRP_CROWDED_IS 2; ! when filled entries outnumber unfilled by _ to 1 ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Abstract Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RelationTest relation task X Y handler rv; handler = RlnGetF(relation, RR_HANDLER); return handler(relation, task, X, Y); ]; [ RlnGetF rel fld i; rel = BlkValueGetLongBlock(rel); return rel-->fld; ]; [ RlnSetF rel fld v; rel = BlkValueGetLongBlock(rel); rel-->fld = v; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Empty Relations ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ EmptyRelationHandler relation task X Y; if (task == RELS_EMPTY) rtrue; rfalse; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Creation ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RELATION_TY_Create kov from sb rel i skov handler; rel = FlexAllocate((RRV_DATA_BASE + 3*RRP_MIN_SIZE)*WORDSIZE, RELATION_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); if ((from == 0) && (kov ~= 0)) from = DefaultValueFinder(kov); if (from) { for (i=0: i= 0: at--) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (tmp & RRF_USED) { if (kx) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); if (ky) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); } at--; } return; } else if (task == RELS_COPY) { X = KOVIsBlockValue(kx); Y = KOVIsBlockValue(ky); if (~~(X || Y)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (tmp & RRF_USED) { if (X) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); tmp = BlkValueCopy(BlkValueCreate(kx), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, tmp); } if (Y) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); tmp = BlkValueCopy(BlkValueCreate(ky), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); } } at--; } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; if (sym) { kov = KOVComparisonFunction(kx); if (~~kov) kov = UnsignedCompare; } for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (tmp & RRF_USED) { X = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); Y = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (sym && (kov(X, Y) > 0)) continue; print " "; PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; PrintKindValuePair(ky, Y); print "^"; } } return; } else if (task == RELS_EMPTY) { if (BlkValueRead(rel, RRV_USED) == 0) rtrue; if (X == 1) { DoubleHashSetRelationHandler(rel, RELS_DESTROY); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; BlkValueWrite(rel, tmp, 0); BlkValueWrite(rel, tmp + 1, 0); BlkValueWrite(rel, tmp + 2, 0); } BlkValueWrite(rel, RRV_USED, 0); BlkValueWrite(rel, RRV_FILLED, 0); rtrue; } rfalse; } else if (task == RELS_LOOKUP_ANY) { for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { if (Y == RLANY_GET_X or RLANY_CAN_GET_X) { v = BlkValueRead(rel, tmp + 2); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } if (Y == RLANY_CAN_GET_X) rtrue; return BlkValueRead(rel, tmp + 1); } else { v = BlkValueRead(rel, tmp + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } if (Y == RLANY_CAN_GET_Y) rtrue; return BlkValueRead(rel, tmp + 2); } } } if (Y == RLANY_GET_X or RLANY_GET_Y) print "*** Lookup failed: value not found ***^"; rfalse; } else if (task == RELS_LOOKUP_ALL_X) { if (BlkValueWeakKind(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { v = BlkValueRead(rel, tmp + 2); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 1)); } } return Y; } else if (task == RELS_LOOKUP_ALL_Y) { if (BlkValueWeakKind(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { v = BlkValueRead(rel, tmp + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(v, X) ~= 0) continue; } else { if (v ~= X) continue; } LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 2)); } } return Y; } else if (task == RELS_LIST) { if (X == 0 || BlkValueWeakKind(X) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(X, 0); switch (Y) { RLIST_ALL_X, RLIST_ALL_Y: for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { tmp++; if (Y == RLIST_ALL_Y) tmp++; v = BlkValueRead(rel, tmp); LIST_OF_TY_InsertItem(X, v, false, 0, true); } } return X; RLIST_ALL_PAIRS: ! LIST_OF_TY_InsertItem will make a deep copy of the item, ! so we can reuse a single combination value here Y = BlkValueCreate(kov); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; if (BlkValueRead(rel, tmp) & RRF_USED) { v = BlkValueRead(rel, tmp + 1); BlkValueWrite(Y, COMBINATION_ITEM_BASE, v); v = BlkValueRead(rel, tmp + 2); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, v); LIST_OF_TY_InsertItem(X, Y); } } BlkValueWrite(Y, COMBINATION_ITEM_BASE, 0); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, 0); BlkValueFree(Y); return X; } rfalse; } at = DoubleHashSetLookUp(rel, kx, ky, X, Y); switch(task) { RELS_TEST: if (at >= 0) rtrue; rfalse; RELS_ASSERT_TRUE: if (at >= 0) rtrue; at = ~at; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at) == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } if (KOVIsBlockValue(ky)) { Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); DoubleHashSetCheckResize(rel); rtrue; RELS_ASSERT_FALSE: if (at < 0) rtrue; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); if (KOVIsBlockValue(kx)) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); if (KOVIsBlockValue(ky)) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, 0); rtrue; } ]; [ DoubleHashSetLookUp rel kx ky X Y hashv i free mask perturb flags; ! calculate a hash value for the pair hashv = GetHashValue(kx, x) + GetHashValue(ky, y); ! look in the first expected slot mask = BlkValueRead(rel, RRV_STORAGE); i = hashv & mask; flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) return ~i; if (DoubleHashSetEntryMatches(rel, i, kx, ky, X, Y)) return i; ! not here, keep looking in sequence free = -1; if (flags & RRF_DELETED) free = i; perturb = hashv; hashv = i; for (::) { hashv = hashv*5 + perturb + 1; i = hashv & mask; flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) { if (free >= 0) return ~free; return ~i; } if (DoubleHashSetEntryMatches(rel, i, kx, ky, X, Y)) return i; if ((free < 0) && (flags & RRF_DELETED)) free = i; #ifdef TARGET_ZCODE; @log_shift perturb (-RRP_PERTURB_SHIFT) -> perturb; #ifnot; @ushiftr perturb RRP_PERTURB_SHIFT perturb; #endif; } ]; [ DoubleHashSetCheckResize rel filled ext newext temp i at kov kx ky F X Y; filled = BlkValueRead(rel, RRV_FILLED); ext = BlkValueRead(rel, RRV_STORAGE) + 1; if (filled >= (ext - filled) * RRP_CROWDED_IS) { ! copy entries to temporary space temp = FlexAllocate(ext * (3*WORDSIZE), TEXT_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); for (i=0: i= RRP_LARGE_IS) newext = ext * RRP_RESIZE_LARGE; else newext = ext * RRP_RESIZE_SMALL; BlkValueSetLBCapacity(rel, RRV_DATA_BASE + newext*3); BlkValueWrite(rel, RRV_STORAGE, newext - 1); BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_USED)); for (i=0: i= 0) { print "*** Duplicate entry while resizing ***^"; rfalse; } at = ~at; BlkValueWrite(rel, RRV_DATA_BASE + 3*at, F); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); } ! done with temporary space FlexFree(temp); } ]; [ DoubleHashSetEntryMatches rel at kx ky X Y cx cy; cx = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(cx, X) ~= 0) rfalse; } else { if (cx ~= X) rfalse; } cy = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(cy, Y) ~= 0) rfalse; } else { if (cy ~= Y) rfalse; } rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Hash List Relation Handler ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ HashListRelationHandler rel task X Y sym kov kx ky; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); return HashCoreRelationHandler(rel, task, kx, ky, X, Y, 1); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Hash Table Relation Handler ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ HashTableRelationHandler rel task X Y kov kx ky; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); return HashCoreRelationHandler(rel, task, kx, ky, X, Y, 0); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Reversed Hash Table Relation Handler ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ ReversedHashTableRelationHandler rel task X Y kov kx ky swap; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); switch (task) { RELS_SET_VALENCY: return RELATION_TY_SetValency(rel, X); RELS_TEST, RELS_ASSERT_TRUE, RELS_ASSERT_FALSE: return HashCoreRelationHandler(rel, task, ky, kx, Y, X, 0); RELS_LOOKUP_ANY: switch (Y) { RLANY_GET_X: Y = RLANY_GET_Y; RLANY_GET_Y: Y = RLANY_GET_X; RLANY_CAN_GET_X: Y = RLANY_CAN_GET_Y; RLANY_CAN_GET_Y: Y = RLANY_CAN_GET_X; } RELS_LOOKUP_ALL_X: task = RELS_LOOKUP_ALL_Y; RELS_LOOKUP_ALL_Y: task = RELS_LOOKUP_ALL_X; RELS_SHOW: swap=X; X=Y; Y=swap; swap=kx; kx=ky; ky=swap; RELS_LIST: switch (Y) { RLIST_ALL_X: Y = RLIST_ALL_Y; RLIST_ALL_Y: Y = RLIST_ALL_X; } } return HashCoreRelationHandler(rel, task, kx, ky, X, Y, 0); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Symmetric Relation Handlers ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ SymDoubleHashSetRelationHandler rel task X Y; if (task == RELS_ASSERT_TRUE or RELS_ASSERT_FALSE) DoubleHashSetRelationHandler(rel, task, Y, X); return DoubleHashSetRelationHandler(rel, task, X, Y, 1); ]; [ SymHashListRelationHandler rel task X Y; if (task == RELS_ASSERT_TRUE or RELS_ASSERT_FALSE) HashListRelationHandler(rel, task, Y, X); return HashListRelationHandler(rel, task, X, Y); ]; [ Sym2in1HashTableRelationHandler rel task X Y; if (task == RELS_ASSERT_TRUE or RELS_ASSERT_FALSE) TwoInOneHashTableRelationHandler(rel, task, Y, X); return TwoInOneHashTableRelationHandler(rel, task, X, Y, 1); ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Hash Core Relation Handler ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ HashCoreRelationHandler rel task kx ky X Y mult sym rev at tmp fl; if (task == RELS_SET_VALENCY) { return RELATION_TY_SetValency(rel, X); } else if (task == RELS_DESTROY) { ! clear kx = KOVIsBlockValue(kx); ky = KOVIsBlockValue(ky); if (~~(kx || ky)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { if (kx) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); if (ky || ~~(fl & RRF_SINGLE)) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); } at--; } return; } else if (task == RELS_COPY) { X = KOVIsBlockValue(kx); Y = KOVIsBlockValue(ky); if (~~(X || Y)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { if (X) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); tmp = BlkValueCopy(BlkValueCreate(kx), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, tmp); } if (Y || ~~(fl & RRF_SINGLE)) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); tmp = BlkValueCopy(BlkValueCreate(BlkValueWeakKind(tmp)), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); } } at--; } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; ! Z-machine doesn't have the room to let us pass sym/rev as parameters switch (RELATION_TY_GetValency(rel)) { RRVAL_SYM_V_TO_V: sym = 1; tmp = KOVComparisonFunction(kx); if (~~tmp) tmp = UnsignedCompare; RRVAL_O_TO_V: rev = 1; } for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { X = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); Y = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (fl & RRF_SINGLE) { if (sym && tmp(X, Y) > 0) continue; print " "; if (rev) PrintKindValuePair(ky, Y); else PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; if (rev) PrintKindValuePair(kx, X); else PrintKindValuePair(ky, Y); print "^"; } else { for (mult=1: mult<=LIST_OF_TY_GetLength(Y): mult++) { fl = LIST_OF_TY_GetItem(Y, mult); if (sym && tmp(X, fl) > 0) continue; print " "; if (rev) PrintKindValuePair(ky, fl); else PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; if (rev) PrintKindValuePair(kx, X); else PrintKindValuePair(ky, fl); print "^"; } } } } return; } else if (task == RELS_EMPTY) { if (BlkValueRead(rel, RRV_USED) == 0) rtrue; if (X == 1) { HashCoreRelationHandler(rel, RELS_DESTROY); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; BlkValueWrite(rel, tmp, 0); BlkValueWrite(rel, tmp + 1, 0); BlkValueWrite(rel, tmp + 2, 0); } BlkValueWrite(rel, RRV_USED, 0); BlkValueWrite(rel, RRV_FILLED, 0); rtrue; } rfalse; } else if (task == RELS_LOOKUP_ANY) { if (Y == RLANY_GET_Y or RLANY_CAN_GET_Y) { at = HashCoreLookUp(rel, kx, X); if (at >= 0) { if (Y == RLANY_CAN_GET_Y) rtrue; tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) return tmp; return LIST_OF_TY_GetItem(tmp, 1); } } else { for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { sym = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) { if (KOVIsBlockValue(ky)) { if (BlkValueCompare(X, sym) ~= 0) continue; } else { if (X ~= sym) continue; } } else { if (LIST_OF_TY_FindItem(sym, X) == 0) continue; } if (Y == RLANY_CAN_GET_X) rtrue; return BlkValueRead(rel, tmp + 1); } } } if (Y == RLANY_GET_X or RLANY_GET_Y) print "*** Lookup failed: value not found ***^"; rfalse; } else if (task == RELS_LOOKUP_ALL_X) { if (BlkValueWeakKind(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { sym = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) { if (KOVIsBlockValue(ky)) { if (BlkValueCompare(X, sym) ~= 0) continue; } else { if (X ~= sym) continue; } } else { if (LIST_OF_TY_FindItem(sym, X) == 0) continue; } LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 1)); } } return Y; } else if (task == RELS_LOOKUP_ALL_Y) { if (BlkValueWeakKind(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); at = HashCoreLookUp(rel, kx, X); if (at >= 0) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) LIST_OF_TY_InsertItem(Y, tmp); else LIST_OF_TY_AppendList(Y, tmp); } return Y; } else if (task == RELS_LIST) { if (BlkValueWeakKind(X) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(X, 0); switch (Y) { RLIST_ALL_X: for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) LIST_OF_TY_InsertItem(X, BlkValueRead(rel, tmp + 1)); } return X; RLIST_ALL_Y: for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) LIST_OF_TY_InsertItem(X, tmp, false, 0, true); else LIST_OF_TY_AppendList(X, tmp, false, 0, true); } } return X; RLIST_ALL_PAIRS: if (RELATION_TY_GetValency(rel) == RRVAL_O_TO_V) rev = 1; ! LIST_OF_TY_InsertItem will make a deep copy of the item, ! so we can reuse a single combination value here Y = BlkValueCreate(COMBINATION_TY, tmp); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { BlkValueWrite(Y, COMBINATION_ITEM_BASE + rev, BlkValueRead(rel, tmp + 1)); tmp = BlkValueRead(rel, tmp + 2); if (fl & RRF_SINGLE) { BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1 - rev, tmp); LIST_OF_TY_InsertItem(X, Y); } else { for (mult = LIST_OF_TY_GetLength(tmp): mult > 0: mult--) { BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1 - rev, LIST_OF_TY_GetItem(tmp, mult)); LIST_OF_TY_InsertItem(X, Y); } } } } BlkValueWrite(Y, COMBINATION_ITEM_BASE, 0); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, 0); BlkValueFree(Y); return X; } rfalse; } at = HashCoreLookUp(rel, kx, X); switch(task) { RELS_TEST: if (at < 0) rfalse; fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (fl & RRF_SINGLE) { if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } rfalse; } else { return LIST_OF_TY_FindItem(tmp, Y); } RELS_ASSERT_TRUE: if (at < 0) { ! no entry exists for this key, just add one at = ~at; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at) == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } if (KOVIsBlockValue(ky)) { Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); HashCoreCheckResize(rel); break; } ! an entry exists: could be a list or a single value fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); ! flags tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); ! value or list if (fl & RRF_SINGLE) { ! if Y is the same as the stored key, we have nothing to do if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } ! it's different: either replace it or expand into a list, ! depending on the value of mult if (mult) { fl = BlkValueCreate(LIST_OF_TY); ! new list BlkValueWrite(fl, LIST_ITEM_KOV_F, ky); LIST_OF_TY_SetLength(fl, 2); BlkValueWrite(fl, LIST_ITEM_BASE, tmp); ! do not copy LIST_OF_TY_PutItem(fl, 2, Y); ! copy if needed BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, fl); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED); } else { if (KOVIsBlockValue(ky)) { BlkValueFree(tmp); Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); } } else { ! if Y is present already, do nothing. otherwise add it. LIST_OF_TY_InsertItem(tmp, Y, 0, 0, 1); } rtrue; RELS_ASSERT_FALSE: if (at < 0) rtrue; ! an entry exists: could be a list or a single value fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); ! flags tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); ! value or list if (fl & RRF_SINGLE) { ! if the stored key isn't Y, we have nothing to do if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) ~= 0) rtrue; } else { if (tmp ~= Y) rtrue; } ! delete the entry if (KOVIsBlockValue(ky)) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2)); .DeleteEntryIgnoringY; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); if (KOVIsBlockValue(kx)) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, 0); } else { ! remove Y from the list if present LIST_OF_TY_RemoveValue(tmp, Y, 1); ! if the list is now empty, delete the whole entry if (LIST_OF_TY_GetLength(tmp) == 0) { BlkValueFree(tmp); jump DeleteEntryIgnoringY; } } rtrue; } rtrue; ]; [ HashCoreLookUp rel kx X hashv i free mask perturb flags; !print "[HCLU rel=", rel, " kx=", kx, " X=", X, ": "; ! calculate a hash value for the key hashv = GetHashValue(kx, x); ! look in the first expected slot mask = BlkValueRead(rel, RRV_STORAGE); i = hashv & mask; !print "hv=", hashv, ", trying ", i; flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) { !print " - not found]^"; return ~i; } if (HashCoreEntryMatches(rel, i, kx, X)) { !print " - found]^"; return i; } ! not here, keep looking in sequence free = -1; if (flags & RRF_DELETED) free = i; perturb = hashv; hashv = i; for (::) { hashv = hashv*5 + perturb + 1; i = hashv & mask; !print ", ", i; flags = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (flags == 0) { !print " - not found]^"; if (free >= 0) return ~free; return ~i; } if (HashCoreEntryMatches(rel, i, kx, X)) { !print " - found]^"; return i; } if ((free < 0) && (flags & RRF_DELETED)) free = i; #ifdef TARGET_ZCODE; @log_shift perturb (-RRP_PERTURB_SHIFT) -> perturb; #ifnot; @ushiftr perturb RRP_PERTURB_SHIFT perturb; #endif; } ]; [ HashCoreCheckResize rel filled ext newext temp i at kov kx F X Y; filled = BlkValueRead(rel, RRV_FILLED); ext = BlkValueRead(rel, RRV_STORAGE) + 1; if (filled >= (ext - filled) * RRP_CROWDED_IS) { ! copy entries to temporary space temp = FlexAllocate(ext * (3*WORDSIZE), TEXT_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); for (i=0: i= RRP_LARGE_IS) newext = ext * RRP_RESIZE_LARGE; else newext = ext * RRP_RESIZE_SMALL; BlkValueSetLBCapacity(rel, RRV_DATA_BASE + newext*3); BlkValueWrite(rel, RRV_STORAGE, newext - 1); BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_USED)); for (i=0: i= 0) { print "*** Duplicate entry while resizing ***^"; rfalse; } at = ~at; BlkValueWrite(rel, RRV_DATA_BASE + 3*at, F); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, Y); } ! done with temporary space FlexFree(temp); } ]; [ HashCoreEntryMatches rel at kx X cx cy; cx = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); if (KOVIsBlockValue(kx)) { if (BlkValueCompare(cx, X) ~= 0) rfalse; } else { if (cx ~= X) rfalse; } rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Equivalence Hash Table Relation Handler ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ EquivHashTableRelationHandler rel task X Y kx at at2 tmp fl i ext; kx = KindBaseTerm(BlkValueRead(rel, RRV_KIND), 0); if (task == RELS_SET_VALENCY) { return RELATION_TY_SetValency(rel, X); } else if (task == RELS_DESTROY) { ! clear if (KOVIsBlockValue(kx)) { at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); } at--; } } return; } else if (task == RELS_COPY) { if (KOVIsBlockValue(kx)) { at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl & RRF_USED) { tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1); tmp = BlkValueCopy(BlkValueCreate(kx), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1); } at--; } } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; ext = BlkValueRead(rel, RRV_STORAGE); ! flag all items by negating their group numbers for (at=0, X=RRV_DATA_BASE: at<=ext: at++, X=X+3) if (BlkValueRead(rel, X) & RRF_USED) BlkValueWrite(rel, X + 2, -(BlkValueRead(rel, X + 2))); ! display groups, unflagging them as we go for (at=0, X=RRV_DATA_BASE, fl=0: at<=ext: at++, X=X+3, fl=0) { if (BlkValueRead(rel, X) & RRF_USED) { fl = BlkValueRead(rel, X + 2); if (fl > 0) continue; ! already visited BlkValueWrite(rel, X + 2, -fl); ! unflag it ! display the group starting with this member, but only ! if there are more members in the group tmp = BlkValueRead(rel, X + 1); i = 0; for (at2=at+1, Y=RRV_DATA_BASE+3*at2: at2<=ext: at2++, Y=Y+3) { if (BlkValueRead(rel, Y) & RRF_USED) { if (BlkValueRead(rel, Y + 2) ~= fl) continue; BlkValueWrite(rel, Y + 2, -fl); if (~~i) { ! print the saved first member print " { "; PrintKindValuePair(kx, tmp); i = 1; } print ", "; PrintKindValuePair(kx, BlkValueRead(rel, Y + 1)); } } if (i) print " }^"; } } return; } else if (task == RELS_EMPTY) { ! never empty since R(x,x) is always true rfalse; } else if (task == RELS_LOOKUP_ANY) { ! kind of a cheat, but it's faster than searching for a better value to return if (Y == RLANY_CAN_GET_X or RLANY_CAN_GET_Y) rtrue; return X; } else if (task == RELS_LOOKUP_ALL_X or RELS_LOOKUP_ALL_Y) { if (BlkValueWeakKind(Y) ~= LIST_OF_TY) rfalse; LIST_OF_TY_SetLength(Y, 0); BlkValueWrite(Y, LIST_ITEM_KOV_F, kx); at = HashCoreLookUp(rel, kx, X); if (at < 0) { LIST_OF_TY_InsertItem(Y, X); } else { X = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 3*at; fl = BlkValueRead(rel, tmp); if (fl & RRF_USED) { if (BlkValueRead(rel, tmp + 2) ~= X) continue; LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 1)); } } } return Y; } else if (task == RELS_LIST) { print "*** Domains of equivalence relations cannot be listed ***^"; return X; } at = HashCoreLookUp(rel, kx, X); at2 = HashCoreLookUp(rel, kx, Y); switch(task) { RELS_TEST: if (at < 0) { ! X is a loner, but could still be true if X == Y if (KOVIsBlockValue(kx)) { if (BlkValueCompare(X, Y) == 0) rtrue; } else { if (X == Y) rtrue; } rfalse; } if (at2 < 0) rfalse; if (at == at2) rtrue; tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2) == tmp) rtrue; rfalse; RELS_ASSERT_TRUE: ! if X and Y are the same, we have nothing to do if (KOVIsBlockValue(kx)) { if (BlkValueCompare(X, Y) == 0) rtrue; } else { if (X == Y) rtrue; } if (at < 0) { if (at2 < 0) { ! X and Y both missing: find a new group number and add both entries tmp = 0; ! candidate group number ext = BlkValueRead(rel, RRV_STORAGE); for (i=0: i<=ext: i++) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*i); if (fl & RRF_USED) { fl = BlkValueRead(rel, RRV_DATA_BASE + 3*i + 2); if (fl > tmp) tmp = fl; } } tmp++; ! new group number BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 2); ! add X entry at = ~at; if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); ! add Y entry. at2 might change if X and Y have the same hash code. at2 = ~(HashCoreLookUp(rel, kx, Y)); if (KOVIsBlockValue(kx)) { Y = BlkValueCopy(BlkValueCreate(kx), Y); } fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at2); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 1, Y); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 2, tmp); jump CheckResize; } ! X missing, Y present: add a new X entry at = ~at; if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, X); tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, tmp); jump CheckResize; } if (at2 < 0) { ! X present, Y missing: add a new Y entry at2 = ~at2; if (KOVIsBlockValue(kx)) { Y = BlkValueCopy(BlkValueCreate(kx), Y); } BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at2); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2, RRF_USED+RRF_SINGLE); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 1, Y); tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); BlkValueWrite(rel, RRV_DATA_BASE + 3*at2 + 2, tmp); jump CheckResize; } ! X and Y both present: merge higher group into lower group tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); ! higher group fl = BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2); ! lower group if (tmp < fl) { i = tmp; tmp = fl; fl = i; } ext = BlkValueRead(rel, RRV_STORAGE); for (at=0: at<=ext: at++) { i = RRV_DATA_BASE + 3*at + 2; if (BlkValueRead(rel, i) == tmp) BlkValueWrite(rel, i, fl); } .CheckResize; HashCoreCheckResize(rel); rtrue; RELS_ASSERT_FALSE: ! if X and Y are already in different groups, we have nothing to do if (at < 0 || at2 < 0) rtrue; tmp = BlkValueRead(rel, RRV_DATA_BASE + 3*at + 2); if (BlkValueRead(rel, RRV_DATA_BASE + 3*at2 + 2) ~= tmp) rtrue; ! delete the entry for X BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); if (KOVIsBlockValue(kx)) BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 3*at + 1)); BlkValueWrite(rel, RRV_DATA_BASE + 3*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 3*at + 2, 0); rtrue; } ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Two-In-One Hash Table Relation Handler ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ TwoInOneHashTableRelationHandler rel task X Y sym kov kx ky at at2 tmp fl; kov = BlkValueRead(rel, RRV_KIND); kx = KindBaseTerm(kov, 0); ky = KindBaseTerm(kov, 1); if (task == RELS_SET_VALENCY) { return RELATION_TY_SetValency(rel, X); } else if (task == RELS_DESTROY) { ! clear kx = KOVIsBlockValue(kx); ky = KOVIsBlockValue(ky); if (~~(kx || ky)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl & RRF_USED) if ((kx && (fl & RRF_ENTKEYX)) || (ky && (fl & RRF_ENTKEYY))) { BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1)); } at--; } return; } else if (task == RELS_COPY) { X = KOVIsBlockValue(kx); Y = KOVIsBlockValue(ky); if (~~(X || Y)) return; at = BlkValueRead(rel, RRV_STORAGE); while (at >= 0) { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl & RRF_USED) { if ((X && (fl & RRF_ENTKEYX)) || (Y && (fl & RRF_ENTKEYY))) { ! copy the entry key tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); if (fl & RRF_ENTKEYX) tmp = BlkValueCopy(BlkValueCreate(kx), tmp); else tmp = BlkValueCopy(BlkValueCreate(ky), tmp); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, tmp); ! update references in X/Y fields pointing here if (fl & RRF_HASX) { at2 = TwoInOneLookUp(rel, kx, BlkValueRead(rel, RRV_DATA_BASE + 4*at + 2), RRF_ENTKEYX); if (at2 >= 0) BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 3, tmp); } if (fl & RRF_HASY) { at2 = TwoInOneLookUp(rel, ky, BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3), RRF_ENTKEYY); if (at2 >= 0) BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 2, tmp); } } } at--; } return; } else if (task == RELS_SHOW) { print (string) BlkValueRead(rel, RRV_DESCRIPTION), ":^"; if (sym) { kov = KOVComparisonFunction(kx); if (~~kov) kov = UnsignedCompare; } for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if ((fl & (RRF_USED+RRF_ENTKEYX+RRF_HASY)) == (RRF_USED+RRF_ENTKEYX+RRF_HASY)) { X = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); Y = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (sym && kov(X, Y) > 0) continue; print " "; PrintKindValuePair(kx, X); if (sym) print " <=> "; else print " >=> "; PrintKindValuePair(ky, Y); print "^"; } } return; } else if (task == RELS_EMPTY) { if (BlkValueRead(rel, RRV_USED) == 0) rtrue; if (X == 1) { TwoInOneHashTableRelationHandler(rel, RELS_DESTROY); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 4*at; BlkValueWrite(rel, tmp, 0); BlkValueWrite(rel, tmp + 1, 0); BlkValueWrite(rel, tmp + 2, 0); BlkValueWrite(rel, tmp + 3, 0); } BlkValueWrite(rel, RRV_USED, 0); BlkValueWrite(rel, RRV_FILLED, 0); rtrue; } rfalse; } else if (task == RELS_LOOKUP_ANY) { switch (Y) { RLANY_GET_X, RLANY_CAN_GET_X: at = TwoInOneLookUp(rel, ky, X, RRF_ENTKEYY); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASX) { if (Y == RLANY_CAN_GET_X) rtrue; return BlkValueRead(rel, tmp + 2); } } RLANY_GET_Y, RLANY_CAN_GET_Y: at = TwoInOneLookUp(rel, kx, X, RRF_ENTKEYX); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASY) { if (Y == RLANY_CAN_GET_Y) rtrue; return BlkValueRead(rel, tmp + 3); } } } if (Y == RLANY_GET_X or RLANY_GET_Y) print "*** Lookup failed: value not found ***^"; rfalse; } else if (task == RELS_LOOKUP_ALL_X) { at = TwoInOneLookUp(rel, ky, X, RRF_ENTKEYY); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASX) LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 2)); } return Y; } else if (task == RELS_LOOKUP_ALL_Y) { at = TwoInOneLookUp(rel, kx, X, RRF_ENTKEYX); if (at >= 0) { tmp = RRV_DATA_BASE + 4*at; if (BlkValueRead(rel, tmp) & RRF_HASY) LIST_OF_TY_InsertItem(Y, BlkValueRead(rel, tmp + 3)); } return Y; } else if (task == RELS_LIST) { switch (Y) { RLIST_ALL_X: fl = RRF_USED+RRF_ENTKEYX+RRF_HASY; jump ListEntryKeys; RLIST_ALL_Y: fl = RRF_USED+RRF_ENTKEYY+RRF_HASX; .ListEntryKeys; for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 4*at; if ((BlkValueRead(rel, tmp) & fl) == fl) LIST_OF_TY_InsertItem(X, BlkValueRead(rel, tmp + 1), false, 0, true); } RLIST_ALL_PAIRS: tmp = BlkValueRead(X, LIST_ITEM_KOV_F); if (KindAtomic(tmp) ~= COMBINATION_TY) rfalse; ! LIST_OF_TY_InsertItem will make a deep copy of the item, ! so we can reuse a single combination value here Y = BlkValueCreate(tmp); for (at = BlkValueRead(rel, RRV_STORAGE): at >= 0: at--) { tmp = RRV_DATA_BASE + 4*at; fl = BlkValueRead(rel, tmp); if ((fl & (RRF_USED+RRF_ENTKEYX+RRF_HASY)) == (RRF_USED+RRF_ENTKEYX+RRF_HASY)) { BlkValueWrite(Y, COMBINATION_ITEM_BASE, BlkValueRead(rel, tmp + 1)); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, BlkValueRead(rel, tmp + 3)); LIST_OF_TY_InsertItem(X, Y); } } BlkValueWrite(Y, COMBINATION_ITEM_BASE, 0); BlkValueWrite(Y, COMBINATION_ITEM_BASE + 1, 0); BlkValueFree(Y); return X; } return X; } at = TwoInOneLookUp(rel, kx, X, RRF_ENTKEYX); switch(task) { RELS_TEST: if (at < 0) rfalse; fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (~~(fl & RRF_HASY)) rfalse; tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } rfalse; RELS_ASSERT_TRUE: if (at < 0) { ! create a new forward entry at = ~at; BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); fl = RRF_USED+RRF_HASY+RRF_ENTKEYX; if (kx == ky || ~~(KOVIsBlockValue(kx) || KOVIsBlockValue(ky))) fl = fl + RRF_ENTKEYY; BlkValueWrite(rel, RRV_DATA_BASE + 4*at, fl); if (KOVIsBlockValue(kx)) { X = BlkValueCopy(BlkValueCreate(kx), X); } BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, X); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 2, 0); } else { fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (fl & RRF_HASY) { ! if the Y we're inserting is already there, we're done tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) == 0) rtrue; } else { if (tmp == Y) rtrue; } ! it's different, so delete the reverse entry at2 = TwoInOneLookUp(rel, ky, tmp, RRF_ENTKEYY); if (at2 >= 0) TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYY); } else { BlkValueWrite(rel, RRV_DATA_BASE + 4*at, fl + RRF_HASY); } ! use the existing copy of X X = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); } ! use the existing copy of Y if there is one at2 = TwoInOneLookUp(rel, ky, Y, RRF_ENTKEYY); if (KOVIsBlockValue(ky)) { if (at2 >= 0) Y = BlkValueRead(rel, RRV_DATA_BASE + 4*at2 + 1); else Y = BlkValueCopy(BlkValueCreate(ky), Y); } BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 3, Y); if (at2 >= 0) { ! delete existing reverse entry (and its own forward entry) TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYY, 1); } else { at2 = ~at2; } ! create reverse entry BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) + 1); fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at2); if (fl == 0) BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_FILLED) + 1); fl = fl | (RRF_USED+RRF_HASX+RRF_ENTKEYY); if (kx == ky || ~~(KOVIsBlockValue(kx) || KOVIsBlockValue(ky))) fl = fl | RRF_ENTKEYX; BlkValueWrite(rel, RRV_DATA_BASE + 4*at2, fl); BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 1, Y); BlkValueWrite(rel, RRV_DATA_BASE + 4*at2 + 2, X); TwoInOneCheckResize(rel); rtrue; RELS_ASSERT_FALSE: ! we only have work to do if the entry exists and has a Y which ! matches the Y we're deleting if (at < 0) rtrue; fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if ((fl & RRF_HASY) == 0) rtrue; tmp = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 3); if (KOVIsBlockValue(ky)) { if (BlkValueCompare(tmp, Y) ~= 0) rtrue; } else { if (tmp ~= Y) rtrue; } TwoInOneDelete(rel, at, kx, ky, RRF_ENTKEYX, 1); rtrue; } ]; [ TwoInOneDelete rel at kx ky ekflag both fl at2 E i; !print "[2in1DEL at=", at, " (E=", BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1), ") ekflag=", ekflag, " both=", both, "]^"; fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); if (ekflag == RRF_ENTKEYX) { if (fl & RRF_HASY) { i = RRV_DATA_BASE + 4*at + 3; if (both) E = BlkValueRead(rel, i); BlkValueWrite(rel, i, 0); ! delete matching Y<-X entry if needed if (both) { at2 = TwoInOneLookUp(rel, ky, E, RRF_ENTKEYY); if (at2 >= 0) TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYY); if (at2 == at) fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); } fl = fl & ~RRF_HASY; } } else { if (fl & RRF_HASX) { i = RRV_DATA_BASE + 4*at + 2; if (both) E = BlkValueRead(rel, i); BlkValueWrite(rel, i, 0); ! delete matching X->Y entry if needed if (both) { at2 = TwoInOneLookUp(rel, kx, E, RRF_ENTKEYX); if (at2 >= 0) { TwoInOneDelete(rel, at2, kx, ky, RRF_ENTKEYX); if (at2 == at) fl = BlkValueRead(rel, RRV_DATA_BASE + 4*at); } } fl = fl & ~RRF_HASX; } } if ((fl & (RRF_HASX+RRF_HASY)) == 0) { ! entry is now empty, mark it deleted if (((fl & RRF_ENTKEYX) && KOVIsBlockValue(kx)) || ((ky ~= kx) && (fl & RRF_ENTKEYY) && KOVIsBlockValue(ky))) { BlkValueFree(BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1)); } BlkValueWrite(rel, RRV_DATA_BASE + 4*at, RRF_DELETED); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, 0); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 2, 0); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 3, 0); BlkValueWrite(rel, RRV_USED, BlkValueRead(rel, RRV_USED) - 1); } else { BlkValueWrite(rel, RRV_DATA_BASE + 4*at, fl); } ]; [ TwoInOneLookUp rel ke E ekflag hashv i free mask perturb flags; !print "[2in1LU rel=", rel, " ke=", ke, " E=", E, " ekf=", ekflag, ": "; ! calculate a hash value for the key hashv = GetHashValue(ke, E); ! look in the first expected slot mask = BlkValueRead(rel, RRV_STORAGE); i = hashv & mask; !print "hv=", hashv, ", trying ", i; flags = BlkValueRead(rel, RRV_DATA_BASE + 4*i); if (flags == 0) { !print " - not found]^"; return ~i; } if ((flags & ekflag) && TwoInOneEntryMatches(rel, i, ke, E)) { !print " - found]^"; return i; } ! not here, keep looking in sequence free = -1; if (flags & RRF_DELETED) free = i; perturb = hashv; hashv = i; for (::) { hashv = hashv*5 + perturb + 1; i = hashv & mask; !print ", ", i; flags = BlkValueRead(rel, RRV_DATA_BASE + 4*i); if (flags == 0) { !print " - not found]^"; if (free >= 0) return ~free; return ~i; } if ((flags & ekflag) && TwoInOneEntryMatches(rel, i, ke, E)) { !print " - found]^"; return i; } if ((free < 0) && (flags & RRF_DELETED)) free = i; #ifdef TARGET_ZCODE; @log_shift perturb (-RRP_PERTURB_SHIFT) -> perturb; #ifnot; @ushiftr perturb RRP_PERTURB_SHIFT perturb; #endif; } ]; [ TwoInOneCheckResize rel filled ext newext temp i at kov kx ky F E X Y; filled = BlkValueRead(rel, RRV_FILLED); ext = BlkValueRead(rel, RRV_STORAGE) + 1; if (filled >= (ext - filled) * RRP_CROWDED_IS) { ! copy entries to temporary space temp = FlexAllocate(ext * (4*WORDSIZE), TEXT_TY, BLK_FLAG_WORD+BLK_FLAG_MULTIPLE); for (i=0: i= RRP_LARGE_IS) newext = ext * RRP_RESIZE_LARGE; else newext = ext * RRP_RESIZE_SMALL; BlkValueSetLBCapacity(rel, RRV_DATA_BASE + newext*4); BlkValueWrite(rel, RRV_STORAGE, newext - 1); BlkValueWrite(rel, RRV_FILLED, BlkValueRead(rel, RRV_USED)); for (i=0: i= 0) { print "*** Duplicate entry while resizing ***^"; rfalse; } at = ~at; BlkValueWrite(rel, RRV_DATA_BASE + 4*at, F); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 1, E); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 2, X); BlkValueWrite(rel, RRV_DATA_BASE + 4*at + 3, Y); } ! done with temporary space FlexFree(temp); } ]; [ TwoInOneEntryMatches rel at ke E ce; ce = BlkValueRead(rel, RRV_DATA_BASE + 4*at + 1); if (KOVIsBlockValue(ke)) { if (BlkValueCompare(ce, E) ~= 0) rfalse; } else { if (ce ~= E) rfalse; } rtrue; ]; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! RelationKind.i6t: Empty ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== [ RELATION_TY_Empty rel set handler; handler = RlnGetF(rel, RR_HANDLER); return handler(rel, RELS_EMPTY, set); ]; Array ResourceIDsOfFigures --> 0 1 0; Array ResourceIDsOfSounds --> 0 0; Array BC_0 --> PACKED_TEXT_STORAGE TX_PS_2; Array BC_1 --> PACKED_TEXT_STORAGE TX_PS_3; Array BC_2 --> PACKED_TEXT_STORAGE TX_PS_4; Array BC_3 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_4 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_5 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_6 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_7 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_8 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_9 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_10 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_11 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_12 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_13 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_14 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_15 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_16 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_17 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_18 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_19 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_20 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_21 --> PACKED_TEXT_STORAGE TX_PS_5; Array BC_22 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_23 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_24 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_25 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_26 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_27 --> PACKED_TEXT_STORAGE TX_PS_6; Array BC_28 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_29 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_30 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_31 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_32 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_33 --> PACKED_TEXT_STORAGE TX_PS_7; Array BC_34 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_35 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_36 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_37 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_38 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_39 --> PACKED_TEXT_STORAGE TX_PS_8; Array BC_40 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_41 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_42 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_43 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_44 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_45 --> PACKED_TEXT_STORAGE TX_PS_9; Array BC_46 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_47 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_48 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_49 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_50 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_51 --> PACKED_TEXT_STORAGE TX_PS_10; Array BC_52 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_53 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_54 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_55 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_56 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_57 --> PACKED_TEXT_STORAGE TX_PS_11; Array BC_58 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_59 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_60 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_61 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_62 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_63 --> PACKED_TEXT_STORAGE TX_PS_12; Array BC_64 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_65 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_66 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_67 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_68 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_69 --> PACKED_TEXT_STORAGE TX_PS_13; Array BC_70 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_71 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_72 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_73 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_74 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_75 --> PACKED_TEXT_STORAGE TX_PS_14; Array BC_76 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_77 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_78 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_79 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_80 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_81 --> PACKED_TEXT_STORAGE TX_PS_15; Array BC_82 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_83 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_84 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_85 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_86 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_87 --> PACKED_TEXT_STORAGE TX_PS_16; Array BC_88 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_89 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_90 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_91 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_92 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_93 --> PACKED_TEXT_STORAGE TX_PS_17; Array BC_94 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_95 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_96 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_97 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_98 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_99 --> PACKED_TEXT_STORAGE TX_PS_18; Array BC_100 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_101 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_102 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_103 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_104 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_105 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_106 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_107 --> PACKED_TEXT_STORAGE TX_PS_20; Array BC_108 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_109 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_110 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_111 --> PACKED_TEXT_STORAGE TX_PS_22; Array BC_112 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_113 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_114 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_115 --> PACKED_TEXT_STORAGE TX_PS_23; Array BC_116 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_117 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_118 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_119 --> PACKED_TEXT_STORAGE TX_PS_24; Array BC_120 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_121 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_122 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_123 --> PACKED_TEXT_STORAGE TX_PS_25; Array BC_124 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_125 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_126 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_127 --> PACKED_TEXT_STORAGE TX_PS_26; Array BC_128 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_129 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_130 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_131 --> PACKED_TEXT_STORAGE TX_PS_27; Array BC_132 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_133 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_134 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_135 --> PACKED_TEXT_STORAGE TX_PS_28; Array BC_136 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_137 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_138 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_139 --> PACKED_TEXT_STORAGE TX_PS_29; Array BC_140 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_141 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_142 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_143 --> PACKED_TEXT_STORAGE TX_PS_30; Array BC_144 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_145 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_146 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_147 --> PACKED_TEXT_STORAGE TX_PS_31; Array BC_148 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_149 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_150 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_151 --> PACKED_TEXT_STORAGE TX_PS_32; Array BC_152 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_153 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_154 --> PACKED_TEXT_STORAGE TX_PS_19; Array BC_155 --> PACKED_TEXT_STORAGE TX_PS_33; Array BC_156 --> PACKED_TEXT_STORAGE TX_PS_34; Array BC_157 --> PACKED_TEXT_STORAGE TX_PS_35; Array BC_158 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_159 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_160 --> PACKED_TEXT_STORAGE TX_PS_7; Array BC_161 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_162 --> PACKED_TEXT_STORAGE TX_PS_36; Array BC_163 --> PACKED_TEXT_STORAGE TX_PS_37; Array BC_164 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_165 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_166 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_167 --> PACKED_TEXT_STORAGE TX_PS_38; Array BC_168 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_134; Array BC_169 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_170 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_171 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_172 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_173 --> PACKED_TEXT_STORAGE TX_PS_39; Array BC_174 --> PACKED_TEXT_STORAGE TX_PS_40; Array BC_175 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_176 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_177 --> PACKED_TEXT_STORAGE TX_PS_11; Array BC_178 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_179 --> PACKED_TEXT_STORAGE TX_PS_41; Array BC_180 --> PACKED_TEXT_STORAGE TX_PS_42; Array BC_181 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_182 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_183 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_184 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_185 --> PACKED_TEXT_STORAGE TX_PS_43; Array BC_186 --> PACKED_TEXT_STORAGE TX_PS_44; Array BC_187 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_188 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_189 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_190 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_191 --> PACKED_TEXT_STORAGE TX_PS_45; Array BC_192 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_135; Array BC_193 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_194 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_195 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_196 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_197 --> PACKED_TEXT_STORAGE TX_PS_46; Array BC_198 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_136; Array BC_199 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_200 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_201 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_202 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_203 --> PACKED_TEXT_STORAGE TX_PS_47; Array BC_204 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_137; Array BC_205 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_206 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_207 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_208 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_209 --> PACKED_TEXT_STORAGE TX_PS_48; Array BC_210 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_138; Array BC_211 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_212 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_213 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_214 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_215 --> PACKED_TEXT_STORAGE TX_PS_49; Array BC_216 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_139; Array BC_217 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_218 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_219 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_220 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_221 --> PACKED_TEXT_STORAGE TX_PS_50; Array BC_222 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_140; Array BC_223 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_224 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_225 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_226 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_227 --> PACKED_TEXT_STORAGE TX_PS_51; Array BC_228 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_141; Array BC_229 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_230 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_231 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_232 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_233 --> PACKED_TEXT_STORAGE TX_PS_52; Array BC_234 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_142; Array BC_235 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_236 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_237 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_238 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_239 --> PACKED_TEXT_STORAGE TX_PS_53; Array BC_240 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_143; Array BC_241 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_242 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_243 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_244 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_245 --> PACKED_TEXT_STORAGE TX_PS_54; Array BC_246 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_144; Array BC_247 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_248 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_249 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_250 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_251 --> PACKED_TEXT_STORAGE TX_PS_55; Array BC_252 --> PACKED_TEXT_STORAGE TX_PS_56; Array BC_253 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_254 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_255 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_256 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_257 --> PACKED_TEXT_STORAGE TX_PS_57; Array BC_258 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_259 --> PACKED_TEXT_STORAGE TX_PS_58; Array BC_260 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_261 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_262 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_263 --> PACKED_TEXT_STORAGE TX_PS_59; Array BC_264 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_265 --> PACKED_TEXT_STORAGE TX_PS_60; Array BC_266 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_267 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_268 --> PACKED_TEXT_STORAGE TX_PS_12; Array BC_269 --> PACKED_TEXT_STORAGE TX_PS_61; Array BC_270 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_271 --> PACKED_TEXT_STORAGE TX_PS_62; Array BC_272 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_273 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_274 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_275 --> PACKED_TEXT_STORAGE TX_PS_63; Array BC_276 --> PACKED_TEXT_STORAGE TX_PS_64; Array BC_277 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_278 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_279 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_280 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_281 --> PACKED_TEXT_STORAGE TX_PS_65; Array BC_282 --> PACKED_TEXT_STORAGE TX_PS_66; Array BC_283 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_284 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_285 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_286 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_287 --> PACKED_TEXT_STORAGE TX_PS_67; Array BC_288 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_145; Array BC_289 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_290 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_291 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_292 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_293 --> PACKED_TEXT_STORAGE TX_PS_68; Array BC_294 --> PACKED_TEXT_STORAGE TX_PS_69; Array BC_295 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_296 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_297 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_298 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_299 --> PACKED_TEXT_STORAGE TX_PS_70; Array BC_300 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_301 --> PACKED_TEXT_STORAGE TX_PS_71; Array BC_302 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_303 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_304 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_305 --> PACKED_TEXT_STORAGE TX_PS_72; Array BC_306 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_307 --> PACKED_TEXT_STORAGE TX_PS_73; Array BC_308 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_309 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_310 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_311 --> PACKED_TEXT_STORAGE TX_PS_74; Array BC_312 --> PACKED_TEXT_STORAGE TX_PS_75; Array BC_313 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_314 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_315 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_316 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_317 --> PACKED_TEXT_STORAGE TX_PS_76; Array BC_318 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_319 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_146; Array BC_320 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_321 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_322 --> PACKED_TEXT_STORAGE TX_PS_5; Array BC_323 --> PACKED_TEXT_STORAGE TX_PS_77; Array BC_324 --> PACKED_TEXT_STORAGE TX_PS_78; Array BC_325 --> PACKED_TEXT_STORAGE TX_PS_79; Array BC_326 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_327 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_328 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_329 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_330 --> PACKED_TEXT_STORAGE TX_PS_80; Array BC_331 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_332 --> PACKED_TEXT_STORAGE TX_PS_81; Array BC_333 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_334 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_335 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_336 --> PACKED_TEXT_STORAGE TX_PS_82; Array BC_337 --> PACKED_TEXT_STORAGE TX_PS_83; Array BC_338 --> PACKED_TEXT_STORAGE TX_PS_84; Array BC_339 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_340 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_341 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_342 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_343 --> PACKED_TEXT_STORAGE TX_PS_85; Array BC_344 --> PACKED_TEXT_STORAGE TX_PS_86; Array BC_345 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_346 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_347 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_348 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_349 --> PACKED_TEXT_STORAGE TX_PS_87; Array BC_350 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_351 --> PACKED_TEXT_STORAGE TX_PS_88; Array BC_352 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_353 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_354 --> PACKED_TEXT_STORAGE TX_PS_5; Array BC_355 --> PACKED_TEXT_STORAGE TX_PS_89; Array BC_356 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_357 --> PACKED_TEXT_STORAGE TX_PS_90; Array BC_358 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_359 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_360 --> PACKED_TEXT_STORAGE TX_PS_12; Array BC_361 --> PACKED_TEXT_STORAGE TX_PS_91; Array BC_362 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_363 --> PACKED_TEXT_STORAGE TX_PS_92; Array BC_364 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_365 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_366 --> PACKED_TEXT_STORAGE TX_PS_5; Array BC_367 --> PACKED_TEXT_STORAGE TX_PS_93; Array BC_368 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_369 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_147; Array BC_370 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_371 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_372 --> PACKED_TEXT_STORAGE TX_PS_12; Array BC_373 --> PACKED_TEXT_STORAGE TX_PS_94; Array BC_374 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_375 --> PACKED_TEXT_STORAGE TX_PS_95; Array BC_376 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_377 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_378 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_379 --> PACKED_TEXT_STORAGE TX_PS_96; Array BC_380 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_381 --> PACKED_TEXT_STORAGE TX_PS_97; Array BC_382 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_383 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_384 --> PACKED_TEXT_STORAGE TX_PS_12; Array BC_385 --> PACKED_TEXT_STORAGE TX_PS_98; Array BC_386 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_387 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_148; Array BC_388 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_389 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_390 --> PACKED_TEXT_STORAGE TX_PS_12; Array BC_391 --> PACKED_TEXT_STORAGE TX_PS_99; Array BC_392 --> PACKED_TEXT_STORAGE TX_PS_21; Array BC_393 --> PACKED_TEXT_STORAGE TX_PS_100; Array BC_394 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_395 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_396 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_397 --> PACKED_TEXT_STORAGE TX_PS_101; Array BC_398 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_149; Array BC_399 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_400 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_401 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_402 --> PACKED_TEXT_STORAGE TX_PS_102; Array BC_403 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_150; Array BC_404 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_405 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_406 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_407 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_408 --> PACKED_TEXT_STORAGE TX_PS_103; Array BC_409 --> PACKED_TEXT_STORAGE TX_PS_104; Array BC_410 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_411 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_412 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_413 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_414 --> PACKED_TEXT_STORAGE TX_PS_105; Array BC_415 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_151; Array BC_416 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_417 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_418 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_419 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_420 --> PACKED_TEXT_STORAGE TX_PS_106; Array BC_421 --> PACKED_TEXT_STORAGE TX_PS_107; Array BC_422 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_423 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_424 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_425 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_426 --> PACKED_TEXT_STORAGE TX_PS_108; Array BC_427 --> PACKED_TEXT_STORAGE TX_PS_109; Array BC_428 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_429 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_430 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_431 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_432 --> PACKED_TEXT_STORAGE TX_PS_110; Array BC_433 --> PACKED_TEXT_STORAGE TX_PS_111; Array BC_434 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_435 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_436 --> PACKED_TEXT_STORAGE TX_PS_11; Array BC_437 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_438 --> PACKED_TEXT_STORAGE TX_PS_112; Array BC_439 --> PACKED_TEXT_STORAGE TX_PS_113; Array BC_440 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_441 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_442 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_443 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_444 --> PACKED_TEXT_STORAGE TX_PS_114; Array BC_445 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_152; Array BC_446 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_447 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_448 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_449 --> PACKED_TEXT_STORAGE TX_PS_115; Array BC_450 --> PACKED_TEXT_STORAGE TX_PS_116; Array BC_451 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_452 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_453 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_454 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_455 --> PACKED_TEXT_STORAGE TX_PS_110; Array BC_456 --> PACKED_TEXT_STORAGE TX_PS_117; Array BC_457 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_458 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_459 --> PACKED_TEXT_STORAGE TX_PS_11; Array BC_460 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_461 --> PACKED_TEXT_STORAGE TX_PS_118; Array BC_462 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_153; Array BC_463 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_464 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_465 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_466 --> PACKED_TEXT_STORAGE TX_PS_119; Array BC_467 --> PACKED_TEXT_STORAGE TX_PS_120; Array BC_468 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_469 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_470 --> PACKED_TEXT_STORAGE TX_PS_11; Array BC_471 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_472 --> PACKED_TEXT_STORAGE TX_PS_121; Array BC_473 --> PACKED_TEXT_STORAGE TX_PS_122; Array BC_474 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_475 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_476 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_477 --> PACKED_TEXT_STORAGE TX_PS_123; Array BC_478 --> PACKED_TEXT_STORAGE TX_PS_124; Array BC_479 --> PACKED_TEXT_STORAGE TX_PS_125; Array BC_480 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_481 --> PACKED_TEXT_STORAGE TX_PS_8; Array BC_482 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_483 --> PACKED_TEXT_STORAGE TX_PS_126; Array BC_484 --> PACKED_TEXT_STORAGE TX_PS_127; Array BC_485 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_154; Array BC_486 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_487 --> PACKED_TEXT_STORAGE TX_PS_8; Array BC_488 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_489 --> PACKED_TEXT_STORAGE TX_PS_128; Array BC_490 --> PACKED_TEXT_STORAGE TX_PS_129; Array BC_491 --> PACKED_TEXT_STORAGE TX_PS_130; Array BC_492 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_493 --> PACKED_TEXT_STORAGE TX_PS_11; Array BC_494 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_495 --> PACKED_TEXT_STORAGE TX_PS_131; Array BC_496 --> PACKED_TEXT_STORAGE TX_PS_132; Array BC_497 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_498 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_499 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_500 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_501 --> PACKED_TEXT_STORAGE TX_PS_133; Array BC_502 --> PACKED_TEXT_STORAGE TX_PS_134; Array BC_503 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_504 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_505 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_506 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_507 --> PACKED_TEXT_STORAGE TX_PS_135; Array BC_508 --> PACKED_TEXT_STORAGE TX_PS_136; Array BC_509 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_510 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_511 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_512 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_513 --> PACKED_TEXT_STORAGE TX_PS_137; Array BC_514 --> PACKED_TEXT_STORAGE TX_PS_138; Array BC_515 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_516 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_517 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_518 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_519 --> PACKED_TEXT_STORAGE TX_PS_139; Array BC_520 --> PACKED_TEXT_STORAGE TX_PS_4; Array BC_521 --> PACKED_TEXT_STORAGE TX_PS_3; Array BC_522 --> PACKED_TEXT_STORAGE TX_PS_140; Array BC_523 --> PACKED_TEXT_STORAGE TX_PS_141; Array BC_524 --> Default_Value_0 0; Array BC_525 --> Default_Value_0 0; Array BC_526 --> PACKED_TEXT_STORAGE TX_PS_142; Array BC_527 --> PACKED_TEXT_STORAGE TX_PS_143; Array BC_528 --> PACKED_TEXT_STORAGE TX_PS_144; Array BC_529 --> PACKED_TEXT_STORAGE TX_PS_145; Array BC_530 --> PACKED_TEXT_STORAGE TX_PS_146; Array BC_531 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_155; Array BC_532 --> PACKED_TEXT_STORAGE EMPTY_TEXT_PACKED; Array BC_533 --> CONSTANT_PACKED_TEXT_STORAGE R_TX_S_156; Array BC_534 --> PACKED_TEXT_STORAGE TX_PS_147; Array BC_535 --> PACKED_TEXT_STORAGE TX_PS_148; Array BC_536 --> PACKED_TEXT_STORAGE TX_PS_149; Array BC_537 --> PACKED_TEXT_STORAGE TX_PS_150; Array BC_538 --> PACKED_TEXT_STORAGE TX_PS_149; Array BC_539 --> PACKED_TEXT_STORAGE TX_PS_150; Array BC_540 --> PACKED_TEXT_STORAGE TX_PS_149; Array BC_541 --> PACKED_TEXT_STORAGE TX_PS_150; ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! Output.i6t: Signing off ! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ! End of automatically generated I6 source ! --------------------------------------------------------------------------